2013-07-30 17 views
5

Projektuję aplikację urządzenia. Kompaktowy framework 2.0KeyPress F1 nie działa C#

Chcę, aby użytkownik nacisnął klawisz F1, aby przejść do następnego ekranu, ale nie działa.

Nie można znaleźć rozwiązania.

Czy to możliwe?

ten sposób normalnie używam przyciśnięcie:

to działa:

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

NIE dos działa:

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

"Duplikat": http://stackoverflow.com/questions/5951496/how-do-i-capture-keys-f1-regardless-of-the-phocused-control-on-a-forma- –

+0

Czy chcesz osiągnąć to w C# lub javascript? –

+0

Co powiesz na debugowanie? – Reniuz

Odpowiedz

4

spróbować tej

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

Dzięki, Ramesh –

+0

Szczęśliwe kodowanie !!! –

+2

Chociaż to faktycznie działa, naprawdę myślę, że powinieneś rozważyć KAŻDĄ z innych odpowiedzi - Użyj wartości wyliczeniowych zamiast porównywania ciągów. –

0

Korzystając KeyDown zamiast o f KeyPress:

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

ustawić także KeyPreview do true

7

informacji podano This

Można zastąpić metodę klasy formularza ProcessCmdKey i używać keyData == Keys.F1 aby sprawdzić, czy F1 jest wciśnięty. Powyższy link ma przykład w następujący sposób.

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) 
} 
Powiązane problemy