2013-09-04 20 views
6

tento di prendere F5 sulla System.Windows.Forms per cui ho scritto:Cattura KeyUp eventi sul 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(); 
     } 
    } 
} 

Ma il mio evento non cattura gli sguardi di lavoro.

Sapete come contattare EventKey su System.Windows.Forms?

+0

È possibile provare prima provandolo facendo qualcosa di simile a questo .... lanciare una nuova eccezione (e.KeyCode.ToString()); .... Forse questo ti darà un indizio su quale codice chiave dovresti usare. Inoltre, assicurati di usare e.Handled = true; – ismellike

+0

Inserisci un punto di interruzione sulla prima riga all'interno di 'MainForm_KeyUp' e assicurati che sia effettivamente colpito. Cosa significa "this.KeyUp + = ..."? Il ctor? Un metodo? Il metodo funziona davvero? Forse non sei effettivamente iscritto all'evento 'KeyUp' ... –

+0

@ismellike e Grant Winney, aggiungendo un'eccezione o breakpoint non sta facendo qualcosa di più. Anche io non ho ricevuto qualcosa dalla mia casella Log. Ciò conferma che l'evento non è stato colto affatto. – mickro

risposta

9

la keypreview property del modulo deve essere impostato su true

Quando questa proprietà è impostata su true, la forma riceverà tutte KeyPress, KeyDown , e gli eventi KeyUp. Dopo che gli handler di evento del modulo hanno completato l'elaborazione del tasto , il tasto viene assegnato a il controllo con lo stato attivo.

+1

+1 Wow, ho lavorato con 'WinForms' per un po 'e non l'ho mai saputo. Ho imparato qualcosa di nuovo ... –