3.Win32 API関数を使ってのEnterキーでの自由自在フォーカス移動 |
1.Win32 API関数を使ってのEnterキーでの自由自在フォーカス移動 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定: 使用 API:keybd_event / MapVirtualKey その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.Win32 API関数を使ってのEnterキーでの自由自在フォーカス移動 |
Option Explicit 'SampleNo:005 2002.04.16 @ 2006.12.28 'キーストロークをシミュレートする(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) 'Shift + Enter で逆移動 If Shift = 1 And KeyCode = vbKeyReturn Then Call sRemoveFocus(1) KeyCode = 0 End If 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 この手のサンプルは、色々な方法が掲載されていますが、テキストボックスが幾つもあってテキストボックス個別のイベントにコードを書くのが面倒な場合とか、SendKeys "{Tab}" のような方法は、OS 等によっては、誤作動する等、又、↑↓キーでも移動したいとか逆方向への移動を望むならこのようにAPI関数を使った方法に落ち着くのかなと思ってこのサンプルも残しておきます。 (本来は、Win2000 以降はkeybd_event関数の代わりに SendInput を使ってくださいとの事ですので。) 上記プログラムの動作は、下記のような動きをします。 TAB キー又は Enter キー又は ↓キーで次のテキストボックスにフォーカスが移動します。 Shift + TAB キー又は Shift + Enter キー又は ↑キーで前のテキストボックスにフォーカスが移動します。 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
テキストボックスでのEnter キーによるフォーカス移動 keybd_event関数の使用例 Enterキーの入力でフォーカスを次に移動 EnterキーのTab動作扱い Returnキーを押したら次のコントロールにフォーカスを移動させたい ReturnキーでTabキーの動作 |