He estado trabajando durante un tiempo en mi proyecto Windows Forms, y decidí experimentar con los atajos de teclado. Después de un rato de lectura, pensé que tenía que acaba de escribir un controlador de eventos y enlazarlo a KeyDown del formulario evento:Formularios que no responden a eventos KeyDown
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
lo hice el buen camino viejo de abrir el panel Propiedades del diseñador de Visual Studio , haciendo doble clic en el evento KeyDown de mi formulario para generar el controlador de eventos Form1_KeyDown
. Pero al probar mi aplicación, el formulario no responde en absoluto al Ctrl + Alt + O atajo de teclado. El diseñador de Visual Studio hizo generar el código para enlazar el controlador de eventos a la forma embargo:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
así que traté de añadir una llamada Console.WriteLine()
al controlador para comprobar que estaba siendo llamado en absoluto, pero sin suerte en ese ya sea.
Además, traté de establecer un punto de interrupción en la llamada de enlace de eventos (que se muestra arriba) y encontré que el programa alcanza ese punto de interrupción muy bien. Pero nunca se alcanzan los puntos de interrupción que establecí dentro de la definición del método.
Para asegurarse de que estaba haciendo los primeros pasos correctamente, he intentado repetir con ellos:
Una nueva forma en la misma solución.
mismo problema: el formulario no responde cuando se presiona mi Ctrl +Alt +O combinación de teclas y el depurador no es ni siquiera entrar en el controlador de eventos.Intenté esto de nuevo y funciona.Una nueva solución de WinForms.
Funciona perfectamente: aparece el cuadro de diálogo del mensaje (la llamadaConsole.WriteLine()
también funciona).
Así que estoy bastante perdido aquí. ¿Qué impide que todos los formularios de este proyecto reciban eventos KeyDown?
No, así que lo cambié y eso lo resolvió. Gracias por su respuesta y el enlace de documentación. – BoltClock
Es un truco, disponible para mantener contentos a los programadores de VB6. Tiene problemas de orden de ejecución, reemplaza a ProcessCmdKey() en su lugar. –
@HansPassant, no encuentro nada que explique los problemas de orden de ejecución. KeyDown + KeyPreview no verá todas las claves, que es un problema suficiente, pero ¿cuáles son los problemas de orden de ejecución? – kdbanman