Cerrar el formulario Principal sin cerrar la aplicación C#

En el foro de MSDN ha habido un pique sano sobre los lenguajes de programación VB.Net Vs C# yo como representante de los de ; quiero responder al reto de poder cerrar el formulario principal de una aplicación Windows sin cerrar la aplicación entera  ni ocultar este formulario.

 

Mi propuesta es:

 

Toda aplicación Windows empieza por la función Main() que es la entrada de la aplicación y la encargada de lanzar el formulario principal.

  

Entonces que pasaría si no abrimos directamente el formulario y solo abrimos el contexto para la aplicación?

 ApplicationContext (Clase)

Especifica información contextual sobre un subproceso de aplicación.


Espacio de nombres: System.Windows.Forms

 

Primero crearemos la clase que utilizaremos para manejar los formularios

 

 

Lo más importante es que herede de ApplicationContext para poderla utilizar para arrancar la aplicación.

 

Crearemos un par de formularios para demostrar la funcionalidad.

 

 

Finalmente en la entrada de la la aplicación utilizaremos nuestra clase personalizada.

 

 

Y ya podemos cerrar los formularios que queramos que la aplicación sigue funcionando. Solo nos quedaría mejorar nuestra clase para saber si tenemos todos los formularios cerrados terminar con la aplicación.

 

Os adjunto el ejemplo y espero el siguiente reto de los de VB ;-).


 


Reto Foro MSDN

 

Saludos.

23 comentarios en “Cerrar el formulario Principal sin cerrar la aplicación C#”

  1. Je Je..a ver lo que tarda Toni Recio en replicarte…muy bueno el ejemplo.

    Un saldo

    JC’s

    p.d:mmm no se, pero en el ambiente se palpa que C#…

  2. PabloNetrix !!!!
    Realmente no tienes imaginación !!! XD

    En el mismo punto que se crea la aplicación la clase estática “Program”, creas un método estático para cerrar la aplicación.

    public static void Close()
    {
    Application.Exit();
    }

    Desde cualquier formulario de tu aplicación o desde la clase que administras todos los formularios la puedes llamar para terminar con la aplicación.

    private void button1_Click(object sender, EventArgs e)
    {
    Program.Close();
    }

    Y ya lo tienes solucionado. 😉

  3. Hola Romny,
    Este reto no pretende descubrir nada nuevo, tan solo responder una consulta que hacia mucho tiempo nadie había dado una solución en los foros de MSDN.

    Estoy totalmente de acuerdo que hay mucha gente en los Foros que no se molesta ni en mirar la documentación. Pero para la gente que queremos aportar y ponemos nuestro granito ya sea en un blog o en los foros no nos tira para atrás esta situación y seguimos aportando con lo que podemos.

    Compartir conocimientos siempre es una buena opción.

    Saludos.

  4. Hola de pelicula esta opcion, yo soy novato en lo que es programacion C sharp express, y me ha ayudado bastante este articulo Gracias… 😉

  5. Ricardo, leonardo:
    Tener encuenta que esto es simplemente una solución propuesta a una duda del foro, no pretende ser la solución definitiva y si eligieramos utilizar esta opción, seguró que tendríamos que detallar mucho mejor su funcionamiento.

    Para evitar no dejar colgada la aplicación no se , podríamos tener una lista de formularios instanciados y en el momento que solo quede uno cerrar por completo la aplicación.

    Program.close() es un método estático creado por nosotros para cerrar la aplicación.

    public static void Close()
    {

    Application.Exit();

    }

    Saludos.

  6. sera a esto que te refieres, es que no he entendido.
    private void finalizarToolStripMenuItem_Click(object sender, EventArgs e)
    {
    Close() ;
    }

    con esto cierro mi formulario principal.

  7. HOLA, MAS QUE UN COMENTARIO TENGO UNA DUDA, MIRA MI APLICACION DE WINDOWS TIENE 7 PANTALAS Y CADA UNA TIENE UN BOTON DE SIGUIENTE PARA IR MOSTRANDO CADA PANTALLA COMO SE DEBE PERO YO LO QUE QUIERO ES QUE CUANDO HAGA CLIC EN CERRAR EN CUALQUIERA DE LAS PANTALLAS SE CIERRE LA APLICACION Y USO EL SIGUIENTE CODIGO.

    private void M_ACC_2_FormClosed(object sender, FormClosedEventArgs e)
    {
    DialogResult result;
    result = MessageBox.Show(this, “Si cierra esta pantalla se cerrará la aplicación. ¿Desea continuar?”, “Mensaje de Sistema”, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
    Application.Exit();
    }
    }
    PERO EL PROBLEMA ES QUE CUANDO EN EL MESSAGEBOX HAGO CLICK EN NO ME OCULTA EL FORMULARIO Y YA NO LO VEO PERO LA APLICACION SIGUE CORRIENDO ESPERO ME PUEDAN AYUDAR GRACIAS.

  8. tu codigo si funciona solo tienes que volver a mostrar tu formulario
    private void M_ACC_2_FormClosed(object sender, FormClosedEventArgs e)

    {

    DialogResult result;

    result = MessageBox.Show(this, “Si cierra esta pantalla se cerrará la aplicación. ¿Desea continuar?”, “Mensaje de Sistema”, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if (result == DialogResult.Yes)

    {

    Application.Exit();
    pantalla2.show();

    }

    }

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *