2017-04-06 3 views
1

キーボードの左右のボタンで機能を呼び出そうとしていますが、それを正しく行う方法がわかりません。左/右のキーボードボタンの使用

この結果、左/右のキーボードキーを押すだけで、通常の方法でGUI要素を切り替えるだけで、所定の機能では機能しません。ここに何が間違っているかわからない:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Right) 
     { 
      func1(); 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      func2(); 
     } 
    } 
+2

フォームでKeyPreviewを有効にしましたか? – Equalsk

+2

あなたがイベントを処理していないためだと思います。ブレークポイントはデバッグ中にヒットしますか?私は[keyprieviewプロパティ](https://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview(v = vs.110).aspx)はあなたが探しているものだと思います。 – Reniuz

答えて

2

いくつかのコメントに記載されているように、キープレビューを有効にする代わりにProcessCmdKeyメソッドをオーバーライドする方法があります。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Right) 
    { 
     func1(); 
     return true; 
    } 
    else if (keyData == Keys.Left) 
    { 
     func2(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

詳細については、this MSDN articleを参照してください。

+0

これは正解と思われる。 'KeyPreview'を' true'に設定するだけでは必ずしも十分ではない、 'Form'の' KeyDown'ハンドラは、例えば ' 「ボタン」に焦点が当てられています。 'ProcessCmdKey'は常に呼び出されます。 –

1

あなたが正しく動作しているコードは、あらかじめ何かを押すことが許されていません。表示されている一般的なキーダウンを探していると思います。here

関連する問題