He probado lo siguiente:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((Keys) e.KeyValue == Keys.Escape)
this.Close();
}
Pero no funciona.
Entonces probé esto:
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape)
this.Close();
}
Y todavía nada funciona.
El KeyPreview en las propiedades de mi formulario de Windows Forms se establece en verdadero ... ¿Qué estoy haciendo mal?
Respuestas:
Esto siempre funcionará, independientemente de la asignación adecuada del controlador de eventos, KeyPreview, CancelButton, etc.
fuente
true
deProcessCmdKey
para indicar que la tecla está manipulada, evitando así el ruido "ding".Debería poder establecer la
CancelButton
propiedad del formulario en su botón Cancelar y luego no necesitará ningún código.fuente
Suponiendo que tiene un botón "Cancelar", establecer la
CancelButton
propiedad del formulario (ya sea en el diseñador o en el código) debería encargarse de esto automáticamente. Simplemente coloque el código para cerrar enClick
caso del botón.fuente
De hecho, la respuesta aceptada es correcta, y he usado ese enfoque varias veces. De repente, ya no funcionaría, así que lo encontré extraño. Principalmente porque mi punto de interrupción no se presionaría para la ESCtecla, pero sí para otras teclas.
Después de la depuración, descubrí que uno de los controles de mi formulario era el
ProcessCmdKey
método de reemplazo , con este código:... y esto impedía que mi formulario obtuviera la ESCclave (fíjese en
return true
). Así que asegúrese de que ningún control infantil se haga cargo de su entrada.fuente
Establece KeyPreview en verdadero en las opciones de su formulario y luego le agrega el evento Keypress. En su evento de pulsación de tecla, escribe lo siguiente:
key.Char == 27
es el valor de escape en código ASCII.fuente
Por botón Escape, ¿te refieres a la tecla Escape? A juzgar por tu código, creo que eso es lo que quieres. También puede probar Application.Salir (), pero Cerrar debería funcionar. ¿Tiene un hilo de trabajo? Si se está ejecutando un hilo que no está en segundo plano, esto podría mantener abierta la aplicación.
fuente
Necesita agregar esto al evento "KeyUp".
fuente
También puede activar alguna otra forma.
Por ejemplo, active un botón Cancelar si edita la propiedad Formulario CancelButton y establece el botón Cancelar.
En el código, trata el botón Cancelar de la siguiente manera para cerrar el formulario:
fuente