Eine Anwendung besteht zweifelsohne in den wenigsten Fällen aus einer einzigen Form. Meist werden weitere Forms benötigt, um z.B. Einstellungen festzulegen, eine bestimmte Auswahl zu treffen und vieles mehr. Vor allem VB-Einsteiger haben hier so ihre Probleme und fragen sich dann immer wieder: "Wie kann ich in der Hauptform feststellen, welche Eingaben der Anwender im Dialogfenster vorgenommen hat?" Das Problem liegt einfach daran, dass mit dem Schließen des Dialogfenster die Einstellungen und Eingaben weg sind Nehmen wir an, der Anwender soll in einem Extra-Dialog ein Passwort eingeben. Die Passwort-Prüfung selbst erfolgt über einen "OK"-Button. Natürlich besitzt der Dialog auch einen "Abbrechen"-Button. Woher weiß jetzt aber die aufrufende Form, ob das Passwort korrekt eingegeben wurde, oder der Anwender den Abbrechen-Button gewählt hat? Und genau hier bringen wir jetzt die Tag-Eigenschaft der Form ins Spiel. Bei korrekter Passwort-Eingabe setzen wir Tag = True, andernfalls logischerweise Tag = False. Anschließend entladen wir die Form nicht sofort (Unload frmPassword), sondern "verstecken" diese mit Me.Hide. Der Dialog "verschwindet" und das Programm kehrt automatisch zurück ins Hauptprogramm, von wo aus wir dann bequem die Tag-Eigenschaft des Passwort-Dialogs abfragen können.' Passwort-Dialog aus frmMain aufrufen Dim bResult As Boolean Load frmPassword With frmPassword .Show vbModal bResult = (.Tag = True) End With Unload frmPassword If bResult Then ' Jepp - korrekte Passwort-Eingabe ... Else ' Abbrechen wurde gewählt End If Der dazugehörige Code des Passwort-Dialogs sieht wie folgt aus: Private Sub cmdOK_Click() ' Passwort-Prüfung If txtPassword.Text = "geheim" Then ' OK, Passwort korrekt Me.Tag = True Me.Hide Else MsgBox "Falsches Kennwort!" End If End Sub Private Sub cmdCancel_Click() ' Abbrechen Me.Tag = False Me.Hide End Sub So, das ganze funktioniert soweit prächtig. Allerdings ergibt sich jetzt noch ein Problem. Und zwar dann, wenn der Anwender den Passwort-Dialog nicht über den "Abbrechen"-Button, sondern über das "Schließen"-Symbol der Form beendet. Denn dann wird die Form geschlossen und die Tag-Eigenschaft ist leer. Fügen wir also noch eine kleine Abfrage ein - und zwar ins Form_QueryUnload-Event. Dieses wird bekanntlich immer dann ausgelöst, wenn die Form geschlossen werden soll. Wenn wir hier "Cancel" auf True setzen und dann sofort den "Abbrechen"-Button per Code ausführen, bleibt die Form geladen und wir können im Hauptprogramm wieder die Tag-Eigenschaftauswerten. Private Sub Form_QueryUnload(UnloadMode As Integer, _ Cancel As Integer) ' Nur, wenn die Form nicht per Code entladen wird ' (Unload frmPassword) If UnloadMode <> vbFormCode Then Cancel = True cmdCancel.Value = True End If End Sub Die hier beschriebene Vorgehensweise lässt sich auch immer dann sehr schön anwenden, wenn man aus dem Hauptprogramm Einstellungen und Eingaben aus dem zusätzlichen Dialogfenster verarbeiten oder speichern muss. Beispiel: In einem Dialog soll der User seinen Namen und seine EMail-Adresse eingeben. Diese Angaben benötigt die aufrufende Prozedur z.B. um sie in eine Liste einzutragen. ' Dialog anzeigen Load frmDialog With frmDialog .Show vbModal If .Tag = True Then ' Eingaben in Liste eintragen lstName.AddItem .txtName.Text + "<" + .txtEMail.Text + ">" End If End With Unload frmDialog Dieser Tipp wurde bereits 18.753 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |