KeyDownでカーソルキーを検出するには?

解決


マルコ  2003-05-22 19:40:37  No: 107230

KeyDownでカーソルキーを検出したいのですが、 
フォームだけの場合はちゃんと検出できるのですけど、 
そのフォームにコマンドボタン等のコントロールが乗っていると、 
カーソルキーの押下がそのフォーカス移動になってしまいます。 
Form1.KeyPreview = True はしています。 
どうすればいいでしょうか。


nanashi  2003-05-22 19:54:17  No: 107231

コマンドボタン上にフォーカスがある時は矢印キーとEnterキーの押下は取得できません。


マルコ  2003-05-22 20:17:38  No: 107232

nanashiさんありがとうございます。
取得できないのは仕様なんでしょうか?
作りこみで対応可能であれば、その方法を教えてください。


ぴろあき  2003-05-22 22:26:55  No: 107233

コマンドボタンのKeyDownイベントで、
キーを判別、
キーが矢印キーだったら、
FormのKeyDownイベントを呼んでやればいいのでは?
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Or KeyCode = vbKeyDown _
Or KeyCode = vbKeyRight Or KeyCode = vbKeyLeft Then
        Call Form_KeyDown(KeyCode, Shift)
    End If
End Sub


ぴろあき  2003-05-22 22:26:58  No: 107234

コマンドボタンのKeyDownイベントで、
キーを判別、
キーが矢印キーだったら、
FormのKeyDownイベントを呼んでやればいいのでは?
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Or KeyCode = vbKeyDown _
Or KeyCode = vbKeyRight Or KeyCode = vbKeyLeft Then
        Call Form_KeyDown(KeyCode, Shift)
    End If
End Sub


マルコ  2003-05-22 22:43:17  No: 107235

ぴろあきさんありがとうございます。

しかしながら、コマンドボタンにフォーカスがある際に矢印キーを押下しても、KeyDownイベントが発生しないため、教えていただいた方法が適用できないです。


Say  2003-05-23 01:39:29  No: 107236

>コマンドボタンにフォーカスがある際に矢印キーを押下しても、KeyDownイベントが発生しないため
それはWindowsの仕様です。
対策としては、CommandButtonにフォーカスがいかないようにするか
(Enabled=FalseにするかGotFocusでDummyのコントロールにSetFocusする)
キーフックしてメッセージをシステムから横取りして処理するかの
どちらかでしょう。


マルコ  2003-06-10 05:58:26  No: 107237

Windowsの仕様ということであきらめました。
みなさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加