Disable Alt + F4 pero permiten la forma para ser cerrada por código, CloseReason.UserClosing no está ayudando

StackOverflow https://stackoverflow.com/questions/2643712

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.

¿Fue útil?

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:

  1. KeyPreview propiedad a true;
  2. alambre hasta la forma de FormClosing y KeyDown 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top