2012-09-14 23 views
7

¿Cómo puedo desactivar el botón de cerrar de un formulario como en la imagen de abajo? (La imagen de abajo muestra una ventana MessageBox)¿Puedo deshabilitar el botón 'cerrar' de un formulario usando C#?

enter image description here

El MessageBox anterior se generó por mí! Quiero desactivar el botón de cerrar de una forma normal.

+0

¿No puedo ver la imagen? :(:( –

+2

Probablemente no debería. Simplemente maneje igual que "No". Alternativamente, podría crear su propio modelo de ventana emergente y diseñarlo como prefiera – musefan

+0

'X' es igual a 'No' en las confirmaciones. el usuario hace clic en eso, él/ella no sabe qué responder, por lo que * debe * dejar que decida sin tocar nada. – Alex

Respuesta

9

Usted maneja el evento Cierre (y no el evento Cerrado) del formulario.

Y luego usa e.CloseReason para decidir si realmente desea bloquearlo (UserClose) o no (TaskManager Close).

Además, hay un pequeño ejemplo Disabling Close Button on Forms en codeproject.

3

debe reemplazar la función CreateParams derivado de System.Windows.Forms.Form

y cambiar el estilo de clase

myCp.ClassStyle = 0x200; 
12

Haga clic derecho sobre la ventana en cuestión, a continuación, haga clic en Propiedades. En Propiedades, haga clic en Eventos. Haga doble clic en el evento FormClosing.

El siguiente código será generado por el diseñador de Windows:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 

} 

simplemente actualizar el código para tener este aspecto (añadir e.Cancel = true;):

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

ya está!

Alternativamente, si desea desactivar el cierre, maximizar y minimizar los botones de la ventana:

Puede hacer clic en la ventana de la derecha de que se trate, a continuación, haga clic en Propiedades. En Propiedades, establezca la propiedad ControlBox en false.

+0

¡Esto es exactamente lo que estaba buscando! tener una experiencia winform mínima (anteriormente solo asp.net) ¡esto ayudó! ¡Gracias! – Ric

7

Si está trabajando con una ventana secundaria MDI y descarta desactivar el botón Cerrar durante la creación de la ventana (es decir, desea desactivarla en determinados momentos durante la vida del formulario), ninguna de las soluciones propuestas anteriormente funcionará¹.

En su lugar, debe utilizar el siguiente código:

[DllImport("user32")] 
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 

[DllImport("user32")] 
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable); 

public static void DisableCloseButton(this Form form) 
{ 
    // The 1 parameter means to gray out. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1); 
} 

public static void EnableCloseButton(this Form form) 
{ 
    // The zero parameter means to enable. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0); 
} 

¹ Es posible ajustar ControlBox = false si no desea ningún botón, pero eso no es lo que pide la pregunta.

0
Closing += (s, eventArgs) => 
     { 
      DialogResult = DialogResult.None; //means that dialog would continue running 
     }; 
Cuestiones relacionadas