2010-06-15 9 views
7

Tengo un WinForm que quiero minimizar cuando se hace clic en la "x" en la esquina superior derecha. Para lograr esto, que tengo:"x" Para minimizar WinForm, ContextMenu para cerrar WinForm?

private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = true; 
     WindowState = FormWindowState.Minimized; 
    } 

Eso es todo muy bien, pero ahora tengo un menú contextual que tiene la opción de cerrar el WinForm, pero debido a que el código anterior, simplemente se minimiza la ventana.

¿Cómo puedo hacer que todo funcione como yo quiero?

Respuesta

10

Haga que el controlador de eventos click configure un indicador bool que se utiliza en el controlador de eventos FormClosing.

simplificada ejemplo de código:

public class YourForm : Form 
{  
    private bool _reallyClose; 

    private void ContextMenuClick(object sender, EventArgs e) 
    { 
     _reallyClose = true; 
     this.Close(); 
    } 

    private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (!_reallyClose) 
     { 
      e.Cancel = true; 
      WindowState = FormWindowState.Minimized; 
     } 
    } 

} 
+0

¡Gracias por el ejemplo de código! :) – sooprise

+0

¡Funcionó a la perfección! – sooprise

0

Es necesario establecer un indicador cuando se hace clic en el menú Cerrar.

Puede verificar la bandera en FormClosing y no hacer nada.

0

Tanto el X como el menú contextual del sistema envían el mismo mensaje de Windows, no creo que pueda separar la acción fácilmente. También es el mensaje Alt + F4.

También diría que no me gustaría este comportamiento no estándar, si toco la X, quiero que se cierre, no se minimice, para eso sirve el botón 2 a la izquierda.

Quizás el mejor enfoque para tener la apariencia que usted desea es no mostrar el botón X predeterminado: apague la función predeterminada, pero en su lugar, dibuje la suya con su propio evento. Esto puede interferir con el menú contextual del sistema, por lo que ya no tendrá una opción de cierre allí.

+0

Olvidé mencionar que esto es para una aplicación de bandeja. Así que presionar "x" quita la ventana de la vista, pero la aplicación todavía se está ejecutando en la bandeja. – sooprise

+0

es el menú contextual al que se refiere desde el ícono de la bandeja o desde el sistema desde la barra de título de la ventana que desea ocultar, o algún otro menú contextual? –

0

¿Puede verificar el remitente para ver si se trata de un elemento contextual y actuar de forma adecuada?