2010-12-07 5 views
11

私はWinFormsフォーム(C#/ .Net)を持っており、PictureBox、MenuStrip、Panel、Buttonコントロールを2つ含んでいます。矢印キーの検出 - ウィンドウ全体のキーダウン

ウィンドウ全体の矢印キーのKeyDownイベントを検出する必要があります。つまり、子コントロールのいずれにフォーカスがあるかにかかわらず、ウィンドウがフォアグラウンドにある場合、矢印キーが押されたことを知り、発生したときにコードを実行する必要があります。

私は、各コントロールのイベントハンドラをアタッチする必要はありません。より良い方法がありますか?どうしたらいいですか?

編集:以下の回答で示唆されているようにKeyPreviewを使用して、私は他のキーを検出することができます。矢印キーを検出できません。フォームのボタンが無効になっている場合にのみ、矢印キーを検出できます。そうでなければ、彼らは前後に焦点を合わせ、イベントを起こさない。フォーム上のボタンで矢印キーを検出するにはどうすればよいですか?

答えて

16

ProcessCmdKey()メソッドをオーバーライドして矢印キーを検出します。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (keyData == Keys.Left) { 
      Console.WriteLine("left"); 
      return true; 
     } 
     // etc.. 
     return base.ProcessCmdKey(ref msg, keyData); 
    }