Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 06.09.06 |
SSTab: Registerkarte wechsle nicht! Dieses Beispiel zeigt, wie man das Wechseln der Registerkarte unterbinden kann, wenn Eingaben der vorigen Registerkarte bspw. nicht vollständig sind. | ||
Autor: Dieter Otter | Bewertung: | Views: 9.433 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Folgendes Szenario:
Wenn der Anwender von einer Registerkarte auf die nächste wechselt, soll überprüft werden, ob alle zwingenden Angaben der vorigen Registerkarte gemacht wurden. Ist dies nicht der Fall, soll wieder die ursprüngliche Registerkarte angezeit werden, d.h. ein Wechseln der Registerkarte unterbunden werden.
Beim Wechseln der Registerkarte wird hierzu das "Click"-Ereignis ausgelöst. Über den Parameter PreviousTab kann die vorige Registerkarte abgefragt werden:
Private Sub SSTab1_Click(PreviousTab As Integer) If PreviousTab = 0 Then ' Prüfen, ob alle zwingenden Angaben der ' 1. Registerkarte gemacht wurden ' ' In diesem Beispiel darf die TextBox "txtName" ' nicht leer sein If Len(txtName.Text) = 0 Then ' Falls nicht, Wechsel der Registerkare unterbinden ' und 1. Registerkarte wieder aktivieren SSTab1.Tab = 0 MsgBox "Bitte geben Sie zunächst Ihren Namen ein!" End If ElseIf PreviousTab = 1 Then ' Prüfen, ob alle zwingenden Angaben der ' 2. Registerkarte gemacht wurden ' ' In diesem Beispiel darf die TextBox "txtEMail" ' nicht leer sein If Len(txtEMail.Text) = 0 Then ' Falls nicht, Wechsel der Registerkare unterbinden ' und 2. Registerkarte wieder aktivieren SSTab1.Tab = 1 MsgBox "Bitte EMail-Adresse eingeben!" End If End If End Sub
Viele User würden obigen Code für "richtig" finden, staunen aber nicht schlecht, wenn Sie den Code ausführen. Durch die Anweisung SSTab.Tab = ... wird autom. wieder das Click-Ereignis ausgelöst, wobei der Parameter "PreviousTab" diesmal schon den Wert der neuen Registerkarte besitzt. Der Code im Click-Ereignis wird daher wieder ausgeführt, was zu einer Endlosschleife führt!
Mit nachfolgender Änderung kann man die Endlosschleife unterbinden und den Wechsel der Registerkarte bei fehlenden Angaben korrekt unterbinden:
Private Sub SSTab1_Click(PreviousTab As Integer) Static bWorking As Boolean If bWorking Then Exit Sub bWorking = True If PreviousTab = 0 Then ' Prüfen, ob alle zwingenden Angaben der ' 1. Registerkarte gemacht wurden ' ' In diesem Beispiel darf die TextBox "txtName" ' nicht leer sein If Len(txtName.Text) = 0 Then ' Falls nicht, Wechsel der Registerkare unterbinden ' und 1. Registerkarte wieder aktivieren SSTab1.Tab = 0 MsgBox "Bitte geben Sie zunächst Ihren Namen ein!" End If ElseIf PreviousTab = 1 Then ' Prüfen, ob alle zwingenden Angaben der ' 2. Registerkarte gemacht wurden ' ' In diesem Beispiel darf die TextBox "txtEMail" ' nicht leer sein If Len(txtEMail.Text) = 0 Then ' Falls nicht, Wechsel der Registerkare unterbinden ' und 2. Registerkarte wieder aktivieren SSTab1.Tab = 1 MsgBox "Bitte EMail-Adresse eingeben!" End If End If bWorking = False End Sub