0

たくさんのコントロールを持つ Windows フォームがあります。矢印キーなど、任意のキーがクリックされるたびに、イベントを発生させたいと考えています。問題はコードではありません。問題は、コントロールにタブ インデックスがあるため、矢印キーをクリックするたびにカーソルが別のコントロールに移動することです。これは望ましくありません。

4

3 に答える 3

2

いくつかのテストの後、私は見つけました

    protected override bool ProcessDialogKey(Keys keyData)
    {
        return false;
    }

これにより、矢印キー(およびタブ)が通常のKeyDownイベントとして配信されます。これにより、通常のダイアログキー機能(タブキーや矢印キーなど)も停止しますが、KeyDownイベントは発生します。

于 2013-01-25T21:45:55.510 に答える
2

現在のフォームにアクティブなコントロールがないことを確認する必要があります。このコードを Form.cs に入れます

this.ActiveControl = null;
于 2013-01-25T21:43:50.480 に答える
2

各コントロールの KeyDown イベントを同じハンドラーにアタッチします。

 Control.KeyDown+=new KeyEventHandler(Control_KeyDown);

 private void Control_KeyDown(object sender, KeyEventArgs e)
 {
        //trap here and handle
        if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
            e.Handled = true;
 }
于 2013-01-25T21:42:15.877 に答える