2013-07-30 34 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

「Duplicate」:http://stackoverflow.com/questions/5951496/how-do-i-capture-keys-f1-regardless-of-the-focused-control-on-a-form – 2013-07-30 13:21:34

+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

快樂編碼! – 2013-07-30 14:05:25

+2

雖然這確實有效,但我真的認爲你應該考慮任何其他答案 - 使用Enum值,而不是比較字符串。 –

0

使用KeyDown代替Ø ˚FKeyPress

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

還設置KeyPreviewtrue

7

是指This

您可以覆蓋你的窗體類的ProcessCmdKey方法和使用keyData == Keys.F1檢查F1是否被按下。以上鍊接有例子如下。對於

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) 
}