Rubrik: Oberfläche · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 15.07.02 |
Tag-Eigenschaft einer Form gekonnt eingesetzt Ein Beispiel, wie man die Tag-Eigenschaft einer Form für den "Beenden"-Status eines Dialogfensters einsetzen kann. | ||
Autor: Dieter Otter | Bewertung: | Views: 18.757 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
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