RSS
StartseiteKnowledge LibraryTop 10Impressum

5.12 Wie erreicht man einen Feldwechsel mit der Eingabe- statt mit der TAB-Taste?

VB4-VB6

Von: Thorsten Dörfler

Zu DOS-Zeiten war es üblich mit der Eingabetaste zwischen den Eingabefeldern zu wechseln. Unter Windows geschieht dies in der Regel mit der TAB- Taste und dies sollte auch so beibehalten werden. In einigen Eingabedialogen kann es aber sinnvoll sein, dem Benutzer zusätzlich die Möglichkeit zu geben, mit der Eingabetaste in das nächste Eingabefeld zu wechseln. Schnell und einfach geht dies Mithilfe des KeyPress- Ereignis und der SendKeys- Anweisung:

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = vbKeyReturn Then
     KeyAscii = 0     ' Standard Beep verhindern
     SendKeys "{TAB}"
  End If
End Sub

Die SendKeys- Anweisung kann aber unter Umständen dafür sorgen, dass sich die Statusanzeige (Num-Lock) der Tastatur zu einer Lichtorgel verwandelt. Zudem bereitet die SendKeys- Anweisung Probleme unter Windows 2000. Dies lässt sich Mithilfe der keybd_event- API und einem einfachem und für diese Zwecke ausreichenden SendKeys Nachbau vermeiden:

Private Const KEYEVENTF_KEYUP = &H2
    
Private Declare Sub keybd_event Lib "user32" _
       (ByVal bVk As Byte, ByVal bScan As Byte, _
        ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    
Public Sub SendKey(ByVal vkKey As Long)
  keybd_event vkKey, 0, 0, 0
  keybd_event vkKey, 0, KEYEVENTF_KEYUP, 0
End Sub

Nun können Sie die SendKeys- Anweisung durch den Nachbau "SendKey" ersetzen. Der Parameter "vkKey" kann mit den VB Keycode Konstanten "vbKey..." belegt werden:

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = vbKeyReturn Then
    KeyAscii = 0     ' Standard Beep verhindern
    SendKey vbKeyTab
  End If
End Sub

Wollen Sie den Feldwechsel per Eingabetaste für mehrere Textfelder ermöglichen, legen Sie am besten ein Steuerelemente Array an. Soll der Feldwechsel per Eingabetaste für das ganze Formular möglich sein, müssen Sie die KeyPreview- Eigenschaft des Form auf "True" setzen und das KeyPress- Ereignis des Form verwenden.

Links zum Thema