¿Cuál es la mejor manera de deshabilitar Alt+ F4en el formulario ac # win para evitar que el usuario cierre el formulario?
Estoy usando un formulario como cuadro de diálogo emergente para mostrar una barra de progreso y no quiero que el usuario pueda cerrarlo.
Respuestas:
Esto hace el trabajo:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; }
Editar: En respuesta a la inquietud de pix0rs, sí, tiene razón en que no podrá cerrar programáticamente la aplicación. Sin embargo, simplemente puede 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();
fuente
e.Cancel = (e.Reason == CloseReason.UserClosing);
. De esta forma garantizas que no cerrarás solo cuando el USUARIO intente cerrar el formulario.Si observa el valor de
FormClosingEventArgs e.CloseReason
, le dirá por qué se cierra el formulario. A continuación, puede decidir qué hacer, los valores posibles 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 múltiples documentos (MDI) se está cerrando.
UserClosing : el usuario cierra el formulario a través de la interfaz de usuario (UI), por ejemplo, al hacer clic en el botón Cerrar en la ventana del formulario, seleccionar Cerrar en el menú de control de la ventana o presionar ALT+ F4.
TaskManagerClosing : el Administrador de tareas de Microsoft Windows está cerrando la aplicación.
FormOwnerClosing : el formulario del propietario se está cerrando.
ApplicationSalirCall : se invocó el método Exit de la clase Application.
fuente
CloseReason
yDialogResult
para obtener mejores resultados.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); }
fuente
Tenga en cuenta que se considera de mala forma que una aplicación evite por completo el cierre. Debe verificar los argumentos del evento para el evento de cierre para determinar cómo y por qué se solicitó el cierre de su aplicación. Si se debe a un cierre de Windows, no debe evitar que se produzca el cierre.
fuente
Se podía manejar el
FormClosing
evento y conjuntoFormClosingEventArgs.Cancel
atrue
.fuente
Si el usuario está decidido a cerrar su aplicación (y tiene el conocimiento suficiente para presionar alt + f4, lo más probable es que también tenga el conocimiento suficiente para ejecutar el administrador de tareas y eliminar su aplicación en su lugar.
Al menos con alt + f4 su aplicación puede hacer un cierre elegante, en lugar de simplemente hacer que la gente la 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 puede reanudar y muchas otras cosas dolorosas.
Al menos incítelos con "¿estás seguro?" En lugar de prevenirlo.
fuente
Este es un truco para deshabilitar Alt+ F4.
private void test_FormClosing(object sender, FormClosingEventArgs e) { if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4) { e.Cancel = true; } }
fuente
System.Windows.Forms
, deberá verificar laControl.ModifierKeys
propiedad estática , en lugar de lathis.ModifierKeys
propiedad (como se muestra en el fragmento de arriba).Formulario de suscripción Evento de clausura
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = e.CloseReason == CloseReason.UserClosing; }
Solo una línea en el cuerpo del método.
fuente
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; } }
fuente
¿Se llamaría a FormClosing incluso cuando esté cerrando la ventana mediante programación? Si es así, probablemente 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)
fuente
Oculte el botón de cierre en el formulario utilizando lo siguiente en el constructor del formulario:
this.ControlBox = false;
fuente