Benutzer mit den meisten Antworten
Probleme mit Public-Variable und Form

Frage
-
Hallo,
ich habe eine Forms-Anwendung mit folgendem Code:Public Class MainForm Public Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call MainFormInit(Me) End Sub
End Class
Die Variable ist deklariert in:Module mMainFormInit Sub MainFormInit(ByVal OBJ As Object) pMainForm = OBJ pMainForm.WindowState = FormWindowState.Maximized End Sub
End Module
(Ich weiß, dass es modernere Möglichkeiten als Publics gibt, aber das ist ein existierendes Programm)Module PublicsFormulare Public pMainForm As Object
End ModuleNach dem Start wird auch MainFormInit korrekt aufgerufen, es öffnet sich jedoch mit dem Befehl pMainForm = OBJ das bei der Erstellung des Projektes verwendete kleine Startfenster.
Zum Befehl pMainForm.WindowState.... kommt er gar nicht mehr .
Das Programm hat vor einigen Tagen noch korrekt gelaufen, nach einer Änderung (welche, weiss ich auch nicht mehr) kam dieser Fehler.VB 2010 Express; Projekt (neu) erstellen brachte keinen Erfolg.
Hat jemand eine Idee und kann mir weiterhelfen?
Antworten
-
Hallo Sven,
die "Publics" sind weniger das Problem, mehr das Verwenden von Object, dort wo es gar nicht nötig ist.
So wird Dein Code nur mit später Bindung laufen und Fehler findest erst zur Laufzeit.
Sinnvoll - gerade für Anfänger - ist es durchgängig mit Option Strict On und dies für das Projekt zu aktivieren.Und damit der Compiler Ruhe gibt:
Private Sub MainForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load mMainFormInit.MainFormInit(Me) ' Übergabe der aktuellen Instanz End Sub Module PublicsFormulare Public pMainForm As Form End Module Module mMainFormInit Sub MainFormInit(ByVal form As Form) PublicsFormulare.pMainForm = form PublicsFormulare.pMainForm.WindowState = FormWindowState.Maximized End Sub End Module
Das nur zu zeigen wie es funktioniert könnte. Denn die vielen Module sind überhaupt nicht notwendig.
Du kannst über Application.OpenForms auf alle zur Zeit geöffneten Formulare zurückgreifen.
Und wenn Dein Code den zuletzt gesicherten Stand (Vollbild oder nicht herstellen soll, könntest Du z. B. etwas
verwenden wie http://www.codeproject.com/Articles/12252/Application-settings-in-VB-NET-2-0-and-Visual-StudSolltest Du andere Ziele verfolgen, erzähl uns davon. Dafür gibt es auch Lösungen.
Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Freitag, 3. August 2012 13:29
-
Hallo Sven,
es funktioniert doch. Ich kann Elmar unterstützen.
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MainFormInit(Me) End Sub End Class
Und der code für das Module (wieso Modul?)
Module Module1 Sub MainFormInit(ByVal OBJ As Form) OBJ.WindowState = FormWindowState.Maximized End Sub End Module
Gruss EllenIch benutze/ I'm using VB2008 & VB2010
- Als Antwort markiert Robert Breitenhofer Freitag, 3. August 2012 13:29
Alle Antworten
-
Hallo Sven,
die "Publics" sind weniger das Problem, mehr das Verwenden von Object, dort wo es gar nicht nötig ist.
So wird Dein Code nur mit später Bindung laufen und Fehler findest erst zur Laufzeit.
Sinnvoll - gerade für Anfänger - ist es durchgängig mit Option Strict On und dies für das Projekt zu aktivieren.Und damit der Compiler Ruhe gibt:
Private Sub MainForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load mMainFormInit.MainFormInit(Me) ' Übergabe der aktuellen Instanz End Sub Module PublicsFormulare Public pMainForm As Form End Module Module mMainFormInit Sub MainFormInit(ByVal form As Form) PublicsFormulare.pMainForm = form PublicsFormulare.pMainForm.WindowState = FormWindowState.Maximized End Sub End Module
Das nur zu zeigen wie es funktioniert könnte. Denn die vielen Module sind überhaupt nicht notwendig.
Du kannst über Application.OpenForms auf alle zur Zeit geöffneten Formulare zurückgreifen.
Und wenn Dein Code den zuletzt gesicherten Stand (Vollbild oder nicht herstellen soll, könntest Du z. B. etwas
verwenden wie http://www.codeproject.com/Articles/12252/Application-settings-in-VB-NET-2-0-and-Visual-StudSolltest Du andere Ziele verfolgen, erzähl uns davon. Dafür gibt es auch Lösungen.
Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Freitag, 3. August 2012 13:29
-
Hallo Elmar,
leider hat Dein Vorschlag keinen Erfolg gebracht: Sobald ich in mMainFormInit die Form der Public-Variablen zuweise, öffnet das kleine Fenster - zum Maximieren kommt er nicht mehr.Ich habe daraufhin weiter gesucht - und auch den Fehler gefunden. Und obwohl es ein ziemlich dummer Fehler von mir ist, teile ich ihn trotzdem mit: In den Publics habe ich eine neue Bitmap aus einer .png-Datei erstellt - dabei aber eine Pfadangabe verwendet, die erst später zur Laufzeit gesetzt wird.
Ist halt vom Compiler auch nicht ganz sauber: Keine Fehlermeldung, auch nicht zur Laufzeit.Mit Strict On hätte ich das aber auch nicht gefunden.
Trotzdem: Vielen Dank für Deine Bemühungen.
Gruß Sven
Sven Grabau
-
Hallo Sven,
es funktioniert doch. Ich kann Elmar unterstützen.
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MainFormInit(Me) End Sub End Class
Und der code für das Module (wieso Modul?)
Module Module1 Sub MainFormInit(ByVal OBJ As Form) OBJ.WindowState = FormWindowState.Maximized End Sub End Module
Gruss EllenIch benutze/ I'm using VB2008 & VB2010
- Als Antwort markiert Robert Breitenhofer Freitag, 3. August 2012 13:29
-
Hallo SvenGrab,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.