質問: ゲームを作っています。 Picturebox内にある画像を移動させるためにキー入力(UP,DOWN,LEFT,RIGHT)させたいのですが、 Pictureboxの他にbuttonが4つあり、キー入力をするとそのbuttonをグルグル移動してしまいます。 あと,buttonを1回クリックしたら、また移動し始めると思うのですがどうすればいいですか?
回答: 矢印キーはタブキーと同様にフォーム上のフォーカス移動に割り当てられていて、しかもKeyDown等のイベントよりも優先されるので、通常のキーイベント処理では実現できません。 そのような標準のキー入力処理をさせずに自前の処理をしたい場合は、フォームの`ProcessCmdKey`メソッドをオーバーライドします。 コード例 ``` protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { switch(keyData) { case Keys.Up: // ↑キーの処理 return true; case Keys.Down: // ↓キーの処理 return true; case Keys.Left: // ←キーの処理 return true; case Keys.Right: // →キーの処理 return true; } return false; } ``` `ProcessCmdKey`メソッドは通常のキー処理よりも優先されるため、アプリケーション内での共通のキー操作として何かさせたいようなときに使えます。 詳細はProcessCmdKeyのリファレンス.aspx)を参照してください。