deshabilitar desactivar como activar c# .net winforms

c# - desactivar - ¿Cómo deshabilitar el formulario de cierre Alt+F4?



desactivar alt f4 (12)

Estoy usando un formulario como un cuadro de diálogo emergente para mostrar una barra de progreso y no quiero que el usuario pueda cerrarlo.

Si el usuario está decidido a cerrar su aplicación (y conocedor) lo suficiente como para presionar alt + f4, lo más probable es que también tenga el conocimiento suficiente para ejecutar el administrador de tareas y matar a su aplicación en su lugar.

Al menos con alt + f4 tu aplicación puede hacer un apagado elegante, en lugar de simplemente hacer que la gente lo mate. Por experiencia, las personas que matan su aplicación significan archivos de configuración corruptos, bases de datos rotas, tareas a medio terminar que no se pueden reanudar, y muchas otras cosas dolorosas.

Al menos sugiéralos con ''¿estás seguro?'' En vez de simplemente evitarlo.

¿Cuál es la mejor manera de desactivar Alt + F4 en el formulario de ac # win para evitar que el usuario cierre el formulario?

Estoy usando un formulario como un cuadro de diálogo emergente para mostrar una barra de progreso y no quiero que el usuario pueda cerrarlo.


¿Se invocará FormClosing incluso cuando cierre la ventana mediante programación? Si es así, es probable que desee agregar algún código para permitir que el formulario se cierre cuando haya terminado con él (en lugar de cancelar siempre la operación)


@TK

Si observa el valor de FormClosingEventArgs e.CloseReason , le dirá por qué se cierra el formulario. A continuación, puede decidir qué hacer, los posibles valores son:

Nombre del miembro - Descripción

Ninguno : la causa del cierre no se definió o no se pudo determinar.

WindowsShutDown : el sistema operativo cierra todas las aplicaciones antes de apagarse.

MdiFormClosing : el formulario principal de este formulario de interfaz de documentos múltiples (MDI) se está cerrando.

UserClosing - El usuario está cerrando el formulario a través de la interfaz de usuario (UI), por ejemplo, haciendo clic en el botón Cerrar en la ventana del formulario, seleccionando Cerrar en el menú de control de la ventana o presionando ALT + F4 .

TaskManagerClosing - El Administrador de tareas de Microsoft Windows está cerrando la aplicación.

FormOwnerClosing : el formulario de propietario se está cerrando.

ApplicationExitCall : se invocó el método Exit de la clase Application.


Creo que esta es la forma correcta de hacerlo:

protected override void OnFormClosing(FormClosingEventArgs e) { switch (e.CloseReason) { case CloseReason.UserClosing: e.Cancel = true; break; } base.OnFormClosing(e); }


Dentro del manejador de evento FormClosing, ¿no podrías interrogar al búfer de teclado (¿tienes acceso a esto?) Para seleccionar si se presionó [Alt] + [F4], cancelar si es verdadero, continuar si no?


Esto funciona para mí, el 100% es para deshabilitar ALT + F4

private void test_FormClosing(object sender, FormClosingEventArgs e) { if (test.ModifierKeys == Keys.Alt || test.ModifierKeys == Keys.F4) { e.Cancel = true; } }


Esto hace el trabajo:

bool myButtonWasClicked = false; private void Exit_Click(object sender, EventArgs e) { myButtonWasClicked = true; Application.Exit(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (myButtonWasClicked) { e.Cancel = false; } else { e.Cancel = true; } }


Esto hace el trabajo:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; }

Editar: en respuesta a la preocupación de los pix0rs: sí, estás en lo cierto al decir que no podrás cerrar programáticamente la aplicación. Sin embargo, puede simplemente eliminar el controlador de eventos para el evento form_closing antes de cerrar el formulario:

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.Close();


Ocultar botón de cerrar en formulario utilizando lo siguiente en el constructor del formulario:

this.ControlBox = false;


Podría manejar el evento FormClosing y establecer FormClosingEventArgs.Cancel en true .


Suscribirse al evento FormClosing

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = e.CloseReason == CloseReason.UserClosing; }

Solo una línea en el cuerpo del método.


Tenga en cuenta que se considera una mala forma para una aplicación evitar por completo el cierre. Debe verificar los argumentos del evento Closing para determinar cómo y por qué se le solicitó cerrar la aplicación. Si se debe a un cierre de Windows, no debe evitar que ocurra el cierre.