2010-12-07 11 views
11

Tengo un Formulario de WinForms (C#/.Net) y contiene un PictureBox, MenuStrip, Panel y dos controles de botón.Detectar clave de flecha: KeyDown para toda la ventana

Necesito detectar el evento KeyDown para las teclas de flecha para toda la ventana; es decir, cuando la ventana está en primer plano, independientemente de cuál de los controles secundarios tenga el foco, necesito saber cuándo se presiona una tecla de flecha y ejecutar algún código cuando sucede.

No quiero ir y adjuntar un controlador de eventos para cada control. ¿Hay una mejor manera? ¿Cómo puedo hacerlo?

Editar: Usando KeyPreview como lo sugiere la respuesta a continuación, puedo detectar otras teclas. No se pueden detectar las teclas de flecha. Puedo detectar teclas de flecha solo cuando los botones de mi formulario están deshabilitados. O bien, toman el foco hacia adelante y hacia atrás y no disparan el evento. ¿Cómo puedo detectar las teclas de flecha con botones en el formulario?

Respuesta

16

Anule el método ProcessCmdKey() para detectar las teclas de flecha.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (keyData == Keys.Left) { 
      Console.WriteLine("left"); 
      return true; 
     } 
     // etc.. 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
Cuestiones relacionadas