2009-12-26 11 views
7

Estoy haciendo una aplicación de Windows (WinForms) y me gustaría que mi aplicación llame a un método cuando el usuario presiona F5 - esto debería funcionar sin importar lo que el usuario esté haciendo, pero deben usar el programa - No quiero usar ganchos globales - ¿Alguna idea?Agregar una tecla rápida F5 en C#

Respuesta

3

Si solo tiene un formulario que puede tener foco, puede establecer la propiedad KeyPreview de ese formulario en true y manejar el evento KeyPress.

La propiedad KeyPreview hará que el formulario reciba todas las pulsaciones de teclas, sin importar qué control del formulario tenga el foco de entrada.

+0

+1 por señalar que sólo va a trabajar para cada forma se establece que la propiedad de y no la aplicación mundial –

4

Comprueba las propiedades Form.KeyPreview, que le permitirá a atrapar todas KeyDown, KeyUp y KeyPress eventos en el nivel de formulario antes de permitir que sean procesados ​​por elementos individuales.

MSDN Form.KeyPreview page

+0

Esto sólo funciona en el caso de aplicaciones triviales que son una forma única y una de las formas los niños siempre tienen enfoque es más como un truco que funciona la mayor parte del tiempo que una solución. –

14

Anulación de ProcessCmdKey en el formulario principal y buscar la forma F5.

protected override bool ProcessCmdKey (ref Message msg, Keys keyData) 
{ 
    bool bHandled = false; 
    // switch case is the easy way, a hash or map would be better, 
    // but more work to get set up. 
    switch (keyData) 
    { 
     case Keys.F5: 
      // do whatever 
      bHandled = true; 
      break; 
    } 
    return bHandled; 
} 
+2

Es posible que desee agregar un caso ** predeterminado ** en el conmutador para que la clase base eche un vistazo a la clave en lugar de simplemente devolver falso: 'predeterminado: return base.ProcessCmdKey (ref msg, keyData) ; ' –

Cuestiones relacionadas