2013-09-04 14 views
6

próbuję złapać F5 na System.Windows.Forms za to pisałem:Złap KeyUp Event na WinForm C#

partial class MainForm 
{ 
    (...) 
    this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); 
    (...) 
} 

public partial class MainForm : Form 
{ 
    (...) 

    private void MainForm_KeyUp(object sender, KeyEventArgs e) 
    { 
     Log("MainForm_KeyUp"); 
     if (e.KeyCode == Keys.F5) 
     { 
      RefreshStuff(); 
     } 
    } 
} 

Ale moje wydarzenie wzrok wygląd nie działa.

Czy wiesz, jak cactch EventKey na System.Windows.Forms?

+0

Możesz najpierw spróbować przetestować go, wykonując coś takiego .... wyrzuć nowy wyjątek (e.KeyCode.ToString()); .... Może to da ci wskazówkę na temat tego, z którego klucza powinieneś skorzystać. Upewnij się również, że używasz e.Handled = true; – ismellike

+0

Umieść punkt przerwania w pierwszym wierszu wewnątrz 'MainForm_KeyUp' i upewnij się, że faktycznie został trafiony. Co to jest 'this.KeyUp + = ...' in? Ctor? Metoda? Czy ta metoda rzeczywiście działa? Być może nie subskrybujesz wydarzenia 'KeyUp' ... –

+0

@ismellike i Grant Winney, dodając wyjątek lub punkt przerwania, nie robisz czegoś więcej. Nawet ja nie dostałem czegoś z mojego dziennika. To potwierdza, że ​​zdarzenie nie jest w ogóle uchwycone. – mickro

Odpowiedz

9

keypreview property formularza musi być ustawiona na true

Gdy ta właściwość ma wartość true, formularz otrzyma wszystkie naciśnięcia klawisza, keyDown i wydarzenia keyUp. Po zakończeniu procedury obsługi zdarzeń przez formularz, naciśnięcie klawisza powoduje przypisanie do klawisza sterowania z fokusem.

+1

+1 Wow, pracowałem z 'WinForms' przez jakiś czas i nigdy o tym nie wiedziałem. Nauczyłem się czegoś nowego ... –