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

解決


マルコ  2003-05-22 10:40:37  No: 107230  IP: [192.*.*.*]

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

編集 削除
nanashi  2003-05-22 10:54:17  No: 107231  IP: [192.*.*.*]

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

編集 削除
マルコ  2003-05-22 11:17:38  No: 107232  IP: [192.*.*.*]

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

編集 削除
ぴろあき  2003-05-22 13:26:55  No: 107233  IP: [192.*.*.*]

コマンドボタンの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 13:26:58  No: 107234  IP: [192.*.*.*]

コマンドボタンの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 13:43:17  No: 107235  IP: [192.*.*.*]

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

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

編集 削除
Say  2003-05-22 16:39:29  No: 107236  IP: [192.*.*.*]

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

編集 削除
マルコ  2003-06-09 20:58:26  No: 107237  IP: [192.*.*.*]

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

編集 削除