2011-02-04 55 views
8

Tengo 2 formularios ... cuando comienzo la aplicación ... y uso el cierre "X" de la barra de título, la aplicación completa se cierra ... ahora cuando selecciono una opción del primer formulario en mi caso, es un botón "AGREGAR" ya que es una aplicación de directorio telefónico ... va a la 2ª forma ya que he usado 1stform.hide() y 2ndform.show() ... ahora cuando hago "X" desde el barra de título no se cierra por completo ya que 1stform no está cerrado ... cómo programarlo de forma que en cualquier etapa se cierre toda la aplicaciónPara cerrar la aplicación de formularios C#

+0

de "En cualquier etapa", ¿se refiere a alguna forma? –

+0

sí ... De cualquiera de los formularios ... solo hay 3 en mi caso –

Respuesta

11

Su primer formulario se configura como el formulario de inicio. Eso significa que cada vez que se cierra, toda la aplicación se cierra. Y a la inversa, su aplicación no se cierra hasta que se cierra. Entonces, cuando oculta el formulario de inicio y muestra el segundo formulario, el usuario que cierra el segundo formulario no activa el cierre de la aplicación porque solo ha cerrado un diálogo secundario no modal.

Recomiendo cambiar su diseño para que el formulario de inicio también sea el formulario principal de su aplicación. No tiene sentido tratar de evitar la funcionalidad incorporada que realmente puede ser útil. Desea que la aplicación se cierre cuando se cierra el formulario principal, sin importar qué otros formularios secundarios estén abiertos.

Pero la solución rápida y sucia en su caso es hacer una llamada al Application.Exit. Eso cerrará todos de los formularios actualmente abiertos y saldrá de su aplicación inmediatamente. Como dije justo arriba, no recomiendo mucho este enfoque porque tener que llamar al Application.Exit desde el controlador de eventos FormClosed de cada formulario es una señal de que algo ha ido muy mal en su diseño.

Si el paradigma de formulario de inicio único no funciona para usted, debe considerar tomar las cosas en sus propias manos y personalizar el método Program.cs en su archivo fuente Program.cs. Consulte las respuestas dadas al this related question para obtener algunas ideas sobre cómo podría funcionar para usted.

+0

+1: ¡Buena respuesta! –

+0

¿Qué es CloseEvent? .... ¿Se supone que debo escribirlo? –

+0

@Vinod: Quise decir el evento 'FormClosed'. La documentación está disponible [aquí] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosed.aspx), pero es solo un evento normal expuesto por la clase 'Form' . Puede suscribirse como cualquier otro evento en su aplicación (por ejemplo, 'Button.Click'). –

5

Lo que puede hacer es usar el evento FormClosing del Formulario y agregar el siguiente código:

Application.Exit(); 

Esto detendrá la aplicación completa y cerrará todas las ventanas. Sin embargo, si se está ejecutando un hilo de fondo, el proceso en sí sobrevivirá. En este caso se puede usar:

Environment.Exit(); 
+0

Un hilo de fondo no impide que el proceso se cierre, ya que se apaga automáticamente.Probablemente te estás refiriendo a un hilo en primer plano. –

+0

@ João Angelo - Lo que quise decir aquí es que si se están ejecutando varios hilos, solo se eliminará el hilo de la GUI, y la aplicación parecerá cerrada, pero el proceso todavía está allí en la lista de procesos. Gracias por señalar :) –

2

Añadir un Application.Exit el caso de las formas cada cierre

así:

Crear un controlador de eventos de cierre primera

private void Form_ClosingEventhandler()(object sender, CancelEventArgs e) 
{ 
     //Perform any processing if required like saving user settings or cleaning resources 
     Application.Exit(); 
} 

continuación, se unen este evento a cualquier forma que crees

//Where you create new form and show it. 
Form1 frm= new Form1(); 
//set other properties 
frm.Closing += new EventHandler(Form_ClosingEventhandler); 
Form2 frm2= new Form2(); 
//set other properties 
frm2.Closing += new EventHandler(Form_ClosingEventhandler); 
+1

funcionó para mí, gracias! +1 – Vbp

1

Seguramente no desea cerrar toda la aplicación después de que el usuario agregue un número de teléfono? Solo necesita asegurarse de que su ventana principal se vuelva a ver. Escríbalo así:

private void AddButton_Click(object sender, EventArgs e) { 
     var frm = new AddPhoneNumber(); 
     frm.StartPosition = FormStartPosition.Manual; 
     frm.Location = this.Location; 
     frm.Size = this.Size; // optional 
     frm.FormClosing += delegate { this.Show(); }; 
     frm.Show(); 
     this.Hide(); 
    } 
Cuestiones relacionadas