visual ventana tecla programar formulario evento escape esc detectar con cerrar boton winforms binding modal-dialog

winforms - ventana - evento keypress c# tecla enter



¿Cómo se obtiene la tecla ESC para cerrar un diálogo en Winforms? (6)

A menudo, cuando se utiliza el software en estos días, la tecla ESC se cerrará un cuadro de diálogo sin persistir los cambios que he realizado. Me gusta especialmente, porque aunque el diálogo puede tener un botón cancelar, no necesariamente quiero mover el mouse o la pestaña hacia el botón Cancelar. Es una manera bonita y limpia de decir "¡Uy, no tenía la intención de hacer eso!" al software. De hecho, me molesta el software que no implementa esta característica y no puedo creer que no esté hecho bajo el capó de Winforms, me parece intuitivo ...

He analizado el enganche en el evento Form KeyPress o el intento de simular un "Cancelar" DialogResult, etc. Parece que hay varias maneras de solucionarlo ...

Entonces la pregunta es: ¿Cuál es la forma más limpia de vincular la tecla ESC para cerrar el diálogo sin guardar ningún cambio?

¡Cualquier ayuda de aquellos que tienen experiencia en esto es muy apreciada!


Hasta cierto punto, depende de su entorno de desarrollo: en .NET está integrado (como lo era en vb.old), las formas tienen una propiedad de "Cancelar botón" "Si esta propiedad está configurada, el botón se ''hace clic'' siempre que el usuario presiona la tecla ''ESC''. "

Hay una propiedad "AcceptButton" correspondiente para la tecla ''ENTER''.

Desde la memoria, los mensajes estándar y los cuadros de diálogo seguirán la lógica anterior de forma predeterminada, aunque, por supuesto, uno puede especificar el botón predeterminado para un cuadro de mensaje en el que no quiere que suceda nada sin que el usuario afirme positivamente que eso es lo que quieren hacer .


Para hacer esto cuando no tiene un botón cancelar, puede anular el proceso cmdkey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessCmdKey(ref msg, keyData); }


Puedes hacerlo:

button b = new button(); b.click = button_click; this.cancelbutton = b; protected void button_click(object sender,eventargs e) { this.close(); }


También puede establecer la propiedad CancelButton del formulario en el botón cancelar:

this.CancelButton = this.cancelButton;

En Visual Studio puede establecer esto a través de las Propiedades del formulario y el código se agrega al archivo Form.Designer.cs


Establezca la propiedad CancelButton del formulario para hacer referencia a su botón Cancelar.


If e.KeyCode = Keys.Escape Then If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub dashboard.Close() ElseIf e.KeyCode = Keys.F5 Then MessageBox.Show("F5") End If

Pruebe esto chicos. Esto es para Mostrar un cuadro de mensajes para la confirmación de Sí o No antes de cerrar los formularios. Puede agregar este código en su formulario dentro del formulario Evento nombrado como Keydown. Aquí "tablero de instrumentos" es el nombre de Nuestro formulario que se cerrará. Este código muestra un cuadro de mensaje con los botones Sí o No. Si selecciona Sí, significa que cerrará su formulario. Si selecciona No, la Acción se cancelará. La forma permanece igual