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.684 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |