2011-09-04 39 views
98

Tengo un cuadro de diálogo modal, y necesito ocultar el botón Cerrar (X), pero no puedo usar ControlBox = false, porque necesito mantener los botones Minimizar y Maximizar.Windows Forms: cómo ocultar el botón Cerrar (x)?

Necesito ocultar solo el botón Cerrar, ¿hay alguna manera de hacerlo?

¡Muchas gracias!

Actualización: Tenía permiso para desactivarlo, lo cual es más simple :) ¡Gracias a todos!

+0

usted está equivocado, no quiero botón Desactivar, pero ocultar es ... ¿puedes encontrar una solución? –

+8

La necesidad es una palabra fuerte. ¿De dónde viene este requisito?¿Cuál es el requisito real: que el usuario no puede finalizar el programa o que la interfaz de usuario "parece que no tiene un botón de cierre"? Porque hay otras formas de evitar esto y será muy difícil cerrar por completo todas ellas (por ejemplo, administrador de tareas, tarea, posiblemente alt + f4, etc.). Personalmente, no me esforzaría mucho en esto, porque a menos que esté rediseñando toda su aplicación de todos modos, será un esfuerzo desperdiciado y romperá las expectativas/continuidad del usuario con otros programas de Windows. –

+4

@Sayem revela esta página, así que no seas tan crítico. –

Respuesta

110

No puede ocultarlo, pero puede deshabilitarlo anulando la propiedad CreateParams del formulario.

private const int CP_NOCLOSE_BUTTON = 0x200; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams myCp = base.CreateParams; 
     myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ; 
     return myCp; 
    } 
} 

Fuente: http://www.codeproject.com/KB/cs/DisableClose.aspx

+0

gracias, encontré esta solución, pero nos gustaría ocultarla, no solo deshabilitar :(anywat gracias! –

+3

no hay otra manera que diseñar su formulario desde cero. –

+0

sí, mejor haga su propia forma con la suya controlbox sin el botón de cerrar y luego ocultar el cuadro de control del formulario principal. – Bahamut

25

Bueno, puede ocultarlo, mediante la eliminación de todo el menú del sistema:

private const int WS_SYSMENU = 0x80000; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style &= ~WS_SYSMENU; 
     return cp; 
    } 
} 

Por supuesto, Si lo hace, el minimizar y maximizar botones.

Si mantiene el menú del sistema pero elimina el elemento de cierre, el botón Cerrar permanece pero está deshabilitado.

La última alternativa es pintar el área no cliente usted mismo. Eso es bastante difícil de hacer bien.

+1

Esto también funciona, gr ¡comer! Pero * ControlBox = falso * es fácil de usar a su manera. – simmeone

+0

Esto es lo mismo que establecer 'ControlBox' en falso. Además, falla el requisito: _Necesito mantener los botones Minimizar y Maximizar_ – whiteshooz

7

Si realmente desea ocultarlo, como en "no visible", entonces probablemente tendrá que crear una forma sin bordes y dibujar los componentes de título usted mismo. La biblioteca VisualStyles tiene los elementos de Windows disponibles. También debería volver a agregar la funcionalidad de cambiar el tamaño del formulario o mover el formulario tomando la barra de título. Por no mencionar el menú del sistema en la esquina.

En la mayoría de los casos, es difícil justificar que el botón "cerrar" no esté disponible, especialmente cuando se quiere un formulario modal con capacidades de minimización. Minimizar una forma modal realmente no tiene sentido.

106

Podemos ocultar botón de cierre en forma mediante el establecimiento de this.ControlBox=false;

+23

¿Leyó la pregunta donde especificó que esa no era una opción? – Servy

+21

Hizo una búsqueda en Google y este SO QA fue el éxito principal. Y esta respuesta era lo que estaba buscando. Gracias Abhishek ... –

+11

Eso oculta todos esos botones de tamaño. No solo el X. –

1

En las propiedades de su conjunto de formularios 'caja de control' = False pero va a ocultar reduce al mínimo y maximizar así.

2

Bien puede ocultar el botón de cierre cambiando el FormBorderStyle de la sección de propiedades o mediante programación en el constructor usando:

public Form1() 
{ 
InitializeComponent(); 
this.FormBorderStyle = FormBorderStyle.None; 
} 

entonces se crea un elemento de banda de menú para salir de la aplicación.

aplausos

0

si esta es una opción que puede configurar

this.FormBorderStyle = FormBorderStyle.None; 

vuelva a crear los botones de minimizar y maximizar

private void button1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
Cuestiones relacionadas