Autotab bei der Eingabe

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Sie kennen das von den Dialogen zur Eingabe von Registrierungsschlüsseln: Sie geben den ersten Fünferpack des Schlüssels ein und der Fokus springt dann automatisch zum folgenden Feld, wo Sie den nächsten Fünferpack eingeben können. Dieses Verhalten wollen wir einmal nachbilden. Dieser Beitrag zeigt, wie das durch den geschickten Einsatz von Ereignisprozeduren leicht gelingt.

Formular erstellen

Als Erstes erstellen wir ein Formular namens frmKeys, dem wir die fünf Textfelder txtKey1, txtKey2, txtKey3, txtKey4 und txtKey5 hinzufügen. Dazwischen platzieren wir jeweils ein Minuszeichen (s. Bild 1).

Das Formular frmKeys in der Entwurfsansicht

Bild 1: Das Formular frmKeys in der Entwurfsansicht

Vorgaben

Was geschieht nun Optimalerweise gibt der Benutzer nacheinander die 25 Zeichen des Keys ein. Dabei wollen wir dafür sorgen, dass immer nach Eingabe von fünf Zeichen ein automatischer Sprung zum nächsten Textfeld erfolgt. Das erledigen wir etwa für das erste Textfeld mit der Prozedur, die durch das Ereignis Bei Taste auf ausgelöst wird und die wir wie folgt füllen:

Private Sub txtKey1_KeyUp(KeyCode As Integer, _
         Shift As Integer)
     If Len(Me!txtKey1.Text) = 5 And _
             Me!txtKey1.SelStart = 5 Then
         Me!txtKey2.SetFocus
     End If
End Sub

Wenn Sie nun fünf Zeichen in das erste Textfeld eingeben, landet die Einfügemarke wie in Bild 2 im zweiten Textfeld. Die If…Then-Bedingung in der Prozedur prüft, ob die Anzahl der Zeichen im Textfeld txtKey1 dem Wert 5 entspricht und ob sich die Einfügemarke an der letzten Position befindet. In diesem Fall wird der Fokus auf das zweite Textfeld txtKey2 verschoben.

Verschieben des Fokus in Aktion

Bild 2: Verschieben des Fokus in Aktion

Diese Prozedur könnten wir nun für die ersten vier Textfelder duplizieren. Allerdings wollen wir dies gleich ein wenig refaktorieren, indem wir die Anweisungen innerhalb der Prozedur in eine eigene Prozedur auslagern, der wir nur noch die Nummer aus der Bezeichnung des Textfeldes übergeben. Die Prozedur txtKey1_Up sieht danach etwa so aus:

Private Sub txtKey1_KeyUp(KeyCode As Integer, _
         Shift As Integer)
     KeyUp KeyCode, Shift, 1
End Sub

Hier wird also die Prozedur KeyUp aufgerufen, der wir neben den Parametern der aufrufenden Ereignisprozedur noch die Nummer der Textbox übergeben, welche das Ereignis auslöst. Für die folgenden vier Textboxen sieht die entsprechende Ereignisprozedur ähnlich aus, nur mit einem anderen Wert für den letzten Parameter.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar