KeyDownでカーソルキーを検出したいのですが、
フォームだけの場合はちゃんと検出できるのですけど、
そのフォームにコマンドボタン等のコントロールが乗っていると、
カーソルキーの押下がそのフォーカス移動になってしまいます。
Form1.KeyPreview = True はしています。
どうすればいいでしょうか。
コマンドボタン上にフォーカスがある時は矢印キーとEnterキーの押下は取得できません。
nanashiさんありがとうございます。
取得できないのは仕様なんでしょうか?
作りこみで対応可能であれば、その方法を教えてください。
コマンドボタンの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
コマンドボタンの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
ぴろあきさんありがとうございます。
しかしながら、コマンドボタンにフォーカスがある際に矢印キーを押下しても、KeyDownイベントが発生しないため、教えていただいた方法が適用できないです。
>コマンドボタンにフォーカスがある際に矢印キーを押下しても、KeyDownイベントが発生しないため
それはWindowsの仕様です。
対策としては、CommandButtonにフォーカスがいかないようにするか
(Enabled=FalseにするかGotFocusでDummyのコントロールにSetFocusする)
キーフックしてメッセージをシステムから横取りして処理するかの
どちらかでしょう。
Windowsの仕様ということであきらめました。
みなさんありがとうございました。
ツイート | ![]() |