DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ボタンコントロールにフォーカスがあるときに上下左右キーの無効化について

環境/言語:[Visual Studio.net2003 OS XP]
分類:[.NET]

こんにちは、どぼんさんにはいつもお世話になっております。

通常ボタンにカーソルがある状態で上下左右キーを押すとコントロールのフォーカスが移動しますね。これはTabStopをFalseにしても移動してしまいます。

これを上下左右キーを押しても移動しないようにする方法はあるでしょうか。
コントロールにてKeyDownイベントをつけていますが、先にフォーカスの移動が発生し、Keydownイベントが発生してくれません。

もしかしたら簡単なことかもしれませんが、なにとぞよろしくお願いいたします。
こんにちは、じゃんぬ です。

■No11076に返信(かつどんさんの記事)
> 通常ボタンにカーソルがある状態で上下左右キーを押すとコントロールのフォーカスが移動しますね。
> これはTabStopをFalseにしても移動してしまいます。
> これを上下左右キーを押しても移動しないようにする方法はあるでしょうか。

ProcessCmdKey をオーバライドすれば可能ではないかと思います。
こういう横着なソースを書いてみてください。
未検証ですが、多分うまくいくと思います。

    Protected Overrides Function ProcessCmdKey(...) As Boolean
        Dim key As Keys = keyData And Keys.KeyCode

        Select Case key
            Case Keys.Left, Keys.Up, Keys.Down, Keys.Right
                If TypeOf Me.ActiveControl Is Button Then
                    Return True
                End If
        End Select

        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
じゃんぬさん。ありがとうございます。
ProcessCmdKeyはかなり強力にきいてしまいますね。
KeyDownイベントも飛ばされたようです。
一応return Trueする直前にKeyDownイベントの関数をローカルで呼ぶ事で目的を果たすことができました。ありがとうございます。
解決済み!
こんにちは、じゃんぬ です。

■No11086に返信(かつどんさんの記事)
> ProcessCmdKeyはかなり強力にきいてしまいますね。
> KeyDownイベントも飛ばされたようです。

ちょっと確認するヒマがなかったものですから、無難なソースを書いちゃいました。
適度にカスタマイズして頂ければ良いかと思いまして、「横着」と書きました。

ちなみに、KeyDown イベントが飛ばされたのは、Return True のせいです。
解決済み!
じゃんぬさん>いえいえ参考ロジックいただいただけで十分です。
HP充実してますね。これからもよろしくお願いします。
解決チェックわすれた。。。
解決済み!
もう解決してしまったようですが、
パネルの上にボタンを置くでもできますよ!

DOBON.NET | プログラミング道 | プログラミング掲示板