2013-07-30 8 views
5

Ich entwerfe eine Geräte-App. Compact Framework 2.0KeyPress F1 funktioniert nicht C#

Ich möchte der Benutzer F1 drücken, um zum nächsten Bildschirm zu navigieren, aber es funktioniert nicht.

Kann nicht scheinen, eine Lösung zu finden.

Ist es möglich?

Dies ist, wie normalerweise Keypress ich benutze:

Dies funktioniert:

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

Diese Arbeit dos NICHT:

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

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

+0

Wollen Sie um dies in C# oder Javascript zu erreichen? –

+0

Wie wäre es mit Debugging? – Reniuz

Antwort

4

versuchen, diese

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

Danke, Ramesh –

+0

Glückliche Codierung !!! –

+2

Während dies tatsächlich funktioniert, denke ich wirklich, dass Sie eine der anderen Antworten berücksichtigen sollten - Verwenden Sie die Enum-Werte, anstatt Strings zu vergleichen. –

0

Verwenden KeyDown statt O f KeyPress:

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

gesetzt Auch KeyPreview zu true

7

Refer This

Sie können die ProcessCmdKey Methode Ihrer Formularklasse außer Kraft setzen und verwenden keyData == Keys.F1 zu prüfen, ob F1 gedrückt wird. Der obige Link hat ein Beispiel wie folgt.

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