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.