Disable Alt + F4 pero permiten la forma para ser cerrada por código, CloseReason.UserClosing no está ayudando
-
27-09-2019 - |
Pregunta
Quiero que la forma no se cerrará haciendo Alt + F4 pero si Application.Exit()
o this.Close
se llama de la misma forma, se debe cerrar.
Me trató CloseReason.UserClosing
pero aún ninguna ayuda.
Solución
Si necesita filtrar Alt + F4 evento sólo (dejando clic del cuadro de cierre, this.Close()
y Application.Exit()
a comportarse como de costumbre) entonces puede sugerir lo siguiente:
-
KeyPreview
propiedad atrue
; -
alambre hasta la forma de
FormClosing
yKeyDown
eventos:private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (_altF4Pressed) { if (e.CloseReason == CloseReason.UserClosing) e.Cancel = true; _altF4Pressed = false; } } private bool _altF4Pressed; private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt && e.KeyCode == Keys.F4) _altF4Pressed = true; }
Otros consejos
Es muy fácil que puede hacerlo por el conjunto SuppressKeyPress propiedad en true en Form_KeyDown manejador de sucesos de la siguiente manera.
if (e.KeyCode == Keys.F4 && e.Alt)
{
e.SuppressKeyPress = true;
}
Con esto se puede también cercano a su forma activa por el conjunto SuppressKeyPress propiedad en false en la misma eventHandller o de cualquier otra manera.
Capturar Alt + F4 tecla de acceso directo mediante el establecimiento de la propiedad KeyPreview formulario en true y anulando método OnProcessCmdKey.
¿Cómo se utiliza CloseReason?
Vea el código de ejemplo aquí: http://msdn.microsoft.com/ en-us / library / system.windows.forms.form.formclosing.aspx
Es necesario establecer la propiedad de los FormClosingEventArgs pasaron Cancelar objeto de detener el cierre de formulario.