APIを使ったフォーカス移動 |
APIを使って↑↓Enterキーでフォーカス移動を実現 (005) | |
フォームに幾つかテキストボックスを貼付け以下のコードを実行してみて下さい。 各テキストボックスにコードを記入しなくても済むし、フォーカス移動が多い場合等非常に便利かと思います。 Option Explicit 'SampleNo=005 WindowsXP VB6.0(SP5) 2002.04.16 'キーストロークをシミュレートする(P1065) Private Declare Sub keybd_event Lib "user32.dll" _ (ByVal bVk As Byte, ByVal bScan As Byte, _ ByVal dwFlags As Long, ByVal dwExtraInfo As Long) '仮想キーコード・ASCII値・スキャンコード間でコードを変換する(P1067) Private Declare Function MapVirtualKey Lib "user32" _ Alias "MapVirtualKeyA" (ByVal wCode As Long, _ ByVal wMapType As Long) As Long Private Const KEYEVENTF_EXTENDEDKEY = &H1 'スキャンコードは拡張コード Private Const KEYEVENTF_KEYUP = &H2 'キーはアップ状態 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Call sKeyDown(KeyCode, Shift) End Sub Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 '消音用 End If End Sub Private Sub Form_Load() 'フォームのイベントを優先 Form1.KeyPreview = True End Sub Private Sub sRemoveFocus(Optional Previous As Integer = 0) If Previous = 1 Then '前のタブ位置へ移動 [TAB]+[TAB] Call keybd_event(vbKeyShift, MapVirtualKey(vbKeyShift, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(vbKeyTab, MapVirtualKey(vbKeyTab, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(vbKeyTab, MapVirtualKey(vbKeyTab, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Call keybd_event(vbKeyShift, MapVirtualKey(vbKeyShift, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Else '次のタブ位置へ移動 [TAB] Call keybd_event(vbKeyTab, MapVirtualKey(vbKeyTab, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(vbKeyTab, MapVirtualKey(vbKeyTab, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) End If End Sub Private Sub sKeyDown(KeyCode As Integer, Shift As Integer) If Shift = 0 Then Select Case KeyCode Case vbKeyReturn 'Enter Call sRemoveFocus Case vbKeyDown '↓ Call sRemoveFocus Case vbKeyUp '↑ Call sRemoveFocus(1) Case Else Exit Sub End Select KeyCode = 0 End If End Sub |
2002/04/17