2009-06-19 3 views
11

ho bisogno di catturare l'evento KeyUp nella mia forma (per alternare una "modalità a schermo intero"). Ecco cosa sto facendo:Capture KeyUp sulla forma in cui il controllo bambino ha concentriamoci

protected override void OnKeyUp(KeyEventArgs e) 
{ 
    base.OnKeyUp(e); 

    if (e.KeyCode == Keys.F12) this.ToggleFullScreen(); 
} 

private void ToggleFullScreen() 
{ 
    // Snazzy code goes here   
} 

Questo funziona correttamente, a meno che un controllo sul modulo sia attivo. In tal caso, non riesco a ottenere l'evento (ho anche provato OnKeyDown - senza fortuna neanche lì).

Sono in grado di gestire l'evento KeyUp dal controllo figlio, ma i controlli del modulo sono generati dinamicamente e potrebbero essercene molti, ognuno con molti propri figli.

Esiste un modo per fare questo senza generare i gestori di eventi per ogni controllo sullo schermo (che certamente potuto fare con una funzione ricorsiva)?

risposta

12

Impostare KeyPreview del form su true e si può intercettare l'evento KeyUp.

Nella mia prova app ho fatto qualcosa di simile:

this.KeyPreview = true; 
. 
. 
. 


private void button1_KeyUp(object sender, KeyEventArgs e) 
{ 
    Trace.WriteLine("button key up"); 
} 

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    Trace.WriteLine("form key up"); 
    e.Handled = true; 
} 

Sarà discarica la linea traccia modulo, gestire la chiave e il gestore di pulsante non verrà chiamato. Ovviamente potresti non gestire l'evento (non eseguire e.Handled = true) e quindi anche il gestore di pulsanti verrà chiamato.

+0

Breve e dolce. Mi piace! – Joseph

+0

Proprio quello di cui avevo bisogno! Perfetto grazie! –

5

Hai provato gestire gli eventi a livello mondiale sul modulo?

protected override bool ProcessCmdKey(ref Message msg, Keys e) 
{ 
    if (e.KeyCode == Keys.F12) 
    { 
     this.ToggleFullScreen(); 
     return true; //marks command as handled 
    } 

    return base.ProcessCmdKey(ref msg, e); // Resend To Base Function 
} 
+0

Anche questo funziona, grazie. –