visual textbox1 studio evento c# .net winforms keydown keyevent

textbox1 - onkeypress c#



¿Cómo capturo Keys.F1 independientemente del control enfocado en un formulario? (4)

Usé el evento KeyDown y un código simple como if (e.KeyCode == Keys.F1) para capturar F1 se presiona en un formulario PERO si hay algunos cuadros de texto en el formulario o si hay algunas hojas de cálculo con Dock Fill en el formulario entonces el código anterior se vuelve inútil y no hace nada. Pero quiero hacer algo cuando el usuario presiona F1 en este formulario. entonces, ¿cómo capturamos un evento de keydown específico como F1 en todo el formulario ... y no quiero ir a la ruta que captura el KeyDown de todos los otros controles en el formulario y pasarlos al Formulario para su procesamiento. ¿Hay alguna manera más limpia de hacer esto?


Encienda KeyPreview y cada pulsación de tecla en el formulario se enrutará primero a través de sus controladores de eventos clave.


Establezca KeyPreview del KeyPreview en verdadero. Esto asegurará que el formulario obtenga primero los mensajes de pulsación de tecla y, si lo maneja, puede establecer e.Handled = true para que no se transmita a los controles.



Sí, de hecho lo hay La forma correcta de manejar los eventos clave independientemente del control que actualmente tenga el foco de entrada es anular el método ProcessCmdKey de su clase de formulario:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.F1) { MessageBox.Show("You pressed the F1 key"); return true; // indicate that you handled this keystroke } // Call the base class return base.ProcessCmdKey(ref msg, keyData); }

Usted devuelve true para indicar que manejó la pulsación de tecla y no desea que se transmita a otros controles. Si desea que se transfiera a los controladores de eventos para otros controles, simplemente devuelva false .

Y lo mejor es ignorar la propiedad KeyPreview . Es un anacronismo de VB 6 días y no es la forma preferida de hacerlo en el mundo de .NET. Lectura adicional: desventaja de configurar Form.KeyPreview = true?