EnterキーによるEdit間フォーカス移動(T) <TOP>
複数のエディットボックス間を「Enter」キーでフォーカス移動させます。
keybd_event
特殊キーの状態を設定
VK_TAB(&H9) [TAB]
KEYEVENTF_KEYUP(&H2) キーを放す
例では、「Enter」が押下されたとき、TabキーのKeyDownおよびKeyUpをシミュレートしています。
Shift + Enter で逆方向に移動します。
条件
EditBoxは、全て複数行入力 → あり、垂直オートスクロール → あり
EditBoxのコントロールIDは、4個とも「EDIT」とする。
文字数制限は、必要文字数+2(CrLfの2文字分)とする。
'================================================================ '= EnterKeyによるEditBox間移動 '= Edit1、Edit2、Edit3、Edit4はコントロールIDを全て「Edit」とする '= 複数行入力(あり)、垂直オートスクロール(あり) '= IMEモードを適宜設定。文字制限は必要最大文字数+2とする '================================================================ #include "Windows.bi" ' 特殊キーの状態を設定 Declare Sub Api_keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As byte, ByVal bScan As byte, ByVal dwFlags&, ByVal dwExtraInfo&) #define VK_TAB &H9 '[TAB] #define KEYEVENTF_KEYUP &H2 'キーを放す Var Shared Edit As Object Edit.Attach GetDlgItem("Edit") : Edit.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Edit.SetFocus End Sub '================================================================ '= Enterを検知しTabを送る '================================================================ Declare Sub EditControl_Change (hWnd As Long) Sub EditControl_Change(hWnd As Long) Var Obj As Object Var Str As String Var EPos As Integer Obj.Attach hWnd Str = Obj.GetWindowText EPos = InStr(Str, Chr$(13)) If EPos <> 0 Then Str = Mid$(Str, 1, EPos - 1) & Mid$(Str, EPos + 2) Obj.SetWindowText Str 'TABをシミュレート Api_keybd_event VK_TAB, 0, 0, 0 Wait 1 Api_keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0 End If End Sub '================================================================ '= フォーカスのあるコントロールのハンドルを取得 '================================================================ Declare Sub Edit_Change edecl () Sub Edit_Change() EditControl_Change GetFocus End Sub '================================================================ While 1 WaitEvent Wend Stop End