2013-07-30 11 views
5

私はデバイスアプリケーションを設計しています。 Compact Framework 2.0KeyPress F1が動作しないC#

次の画面に移動するには、F1キーを押してもらいますが、機能しません。

解決策が見つからないようです。

可能ですか?

これは私が正常にキー押下を使用する方法である:

これは動作します:

 if (e.KeyChar == (char)Keys.M) 
     { 
      MessageBox.Show("M pressed"); 
      e.Handled = true; 
     } 

これがうまくいかDOS:

 if (e.KeyChar == (char)Keys.F1) 
     { 
      MessageBox.Show("F1 pressed"); 
      e.Handled = true; 
     } 
+4

"複製":http://stackoverflow.com/questions/5951496/how-do-i-capture-keys-f1-regardless-of-the-focused-control-on-a-form –

+0

これをC#またはjavascriptで実現するには? –

+0

デバッグはどうですか? – Reniuz

答えて

4

代わりにこの

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.KeyPreview = true; 
    this.KeyDown += new KeyEventHandler(Form1_KeyDown); 
} 

void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode.ToString() == "F1") 
    { 
     MessageBox.Show("F1 pressed"); 
    } 
} 
+0

ありがとう、Ramesh –

+0

ハッピーコーディング! –

+2

これは実際には機能しますが、私は本当にあなたが他の答えのどれかを考慮する必要があると思います - 文字列を比較する代わりにEnum値を使用してください。 –

0

使用KeyDownを試してみてくださいo F KeyPress

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == Keys.F1) 
    { 
     // your code here 
    } 
} 

はまたtrue

7

KeyPreviewを設定あなたのフォームクラスのProcessCmdKeyメソッドをオーバーライドして、F1が押されたかどうかを確認するためにkeyData == Keys.F1を使用することができますThis

を参照してください。上のリンクは次のような例です。 http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.keychar.aspx -

if (e.KeyCode == Keys.F1) 
{ 
    // do stuff 
} 

は、keyCharプロパティ:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.F1) 
    { 
     MessageBox.Show("You pressed the F1 key"); 
     return true; // indicate that you handled this keystroke 
    } 

    // Call the base class 
    return base.ProcessCmdKey(ref msg, keyData) 
} 
2

(F1、F2、矢印キー、タブ....のような)一部のキーは、あなたがキーコードを使用する必要があり、そのためには、keyCharによって "捕獲" することはできません

+0

これをクリアしていただきありがとうございます。 –

関連する問題