He estado trabajando durante un tiempo en mi proyecto de Windows Forms y decidí experimentar con los atajos de teclado. Después de leer un poco, pensé que tenía que escribir un controlador de eventos y vincularlo al evento KeyDown del formulario:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
Hice eso de la buena manera de abrir el panel Propiedades del diseñador de Visual Studio, luego hice doble clic en el evento KeyDown de mi formulario para generar el Form1_KeyDown
controlador de eventos. Pero al probar mi aplicación, el formulario no responde en absoluto al atajo de teclado Ctrl+ Alt+ O. Sin embargo, el diseñador de Visual Studio generó el código para vincular el controlador de eventos al formulario:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
Así que intenté agregar una Console.WriteLine()
llamada al controlador para verificar que se estuviera llamando, pero tampoco tuve suerte.
Además, traté de establecer un punto de interrupción en la llamada de enlace de eventos (que se muestra justo arriba) y descubrí que el programa alcanza ese punto de interrupción sin problemas. Pero los puntos de interrupción que establezco dentro de la definición del método en sí nunca se alcanzan.
Para asegurarme de que estaba haciendo los primeros pasos correctamente, intenté repetirlos con:
Una nueva forma en la misma solución.
Mismo problema: el formulario no responde cuando presiono mi Ctrl+AltO atajo de teclado + y el depurador ni siquiera ingresa al controlador de eventos.Intenté esto de nuevo y funciona.Una nueva solución de WinForms.
Funciona perfectamente: aparece el diálogo de mensaje (laConsole.WriteLine()
llamada también funciona).
Así que estoy bastante perdido aquí. ¿Qué impide que todos los formularios de este proyecto reciban eventos KeyDown?