none
Al cerrar formularios se cierra la aplicación. RRS feed

  • Pregunta

  • Buenos días,

    En el siguiente código, cuando le doy a cualquiera de los dos botones (en realidad son PictureBox habilitadas como botones), sale de la aplicación, sin embargo si cambio this.Close(); por this.Hide; todo funciona bien. según creo esto puede ocurrir porque el formulario que cierro es el de entrada a la aplicación y por eso se cierra todo. En principio creo que necesito crear un punto de entrada diferente con main(), pero no sé como hacerlo, si alguien me puede orientar le estaría muy agradecido. Trabajo con la versión Express de VS2013. Saludos y muchas gracias por anticipado.



            private void boton_nuevo_Click(object sender, EventArgs e)
            {
                this.Close();
                Form2 frm = new Form2();
                frm.Show();
            }

            private void boton_aqui_Click(object sender, EventArgs e)
            {
                this.Close();
                Form3 frm = new Form3();
                frm.Show();
            }
     


    viernes, 20 de febrero de 2015 11:35

Respuestas

  • //==========
    //program.cs
    //==========
    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            public static ApplicationContext AContext;
    
            /// <summary>
            /// Punto de entrada principal para la aplicación.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                AContext = new ApplicationContext(new Form1());
                Application.Run(AContext);
            }
        }
    }
    
    //========
    //form1.cs
    //========
    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form f = new Form();
    
                Program.AContext.MainForm = f;
                Close();
    
                f.Text = ((Button)sender).Name;
                f.Show();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Form f = new Form();
    
                Program.AContext.MainForm = f;
                Close();
    
                f.Text = ((Button)sender).Name;
                f.Show();
            }
        }
    }

    En este ejemplo cambiamos la ventana principal de la aplicación. La ventana principal es la que emite el wm_quit al cerrarse y nos saca del messageloop.


    viernes, 20 de febrero de 2015 12:14

Todas las respuestas

  • Abre el fichero Program.cs y observa el método Main. Verás que tiene una línea que dice algo así como Application.Run(new nombredeformulario()). Este se considera el formulario "principal", y cuando se le hace un Close se cierra la aplicación. Puedes cambiarlo para que el principal sea otro.
    viernes, 20 de febrero de 2015 12:07
  • //==========
    //program.cs
    //==========
    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            public static ApplicationContext AContext;
    
            /// <summary>
            /// Punto de entrada principal para la aplicación.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                AContext = new ApplicationContext(new Form1());
                Application.Run(AContext);
            }
        }
    }
    
    //========
    //form1.cs
    //========
    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form f = new Form();
    
                Program.AContext.MainForm = f;
                Close();
    
                f.Text = ((Button)sender).Name;
                f.Show();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Form f = new Form();
    
                Program.AContext.MainForm = f;
                Close();
    
                f.Text = ((Button)sender).Name;
                f.Show();
            }
        }
    }

    En este ejemplo cambiamos la ventana principal de la aplicación. La ventana principal es la que emite el wm_quit al cerrarse y nos saca del messageloop.


    viernes, 20 de febrero de 2015 12:14
  • Muchas gracias, respecto a lo que comentas, ¿es necesario tener un formulario "principal"? lo digo porque es una aplicación con varios formularios que se van abriendo y cerrando. Si es "obligatorio" tener uno principal abierto, lo que haré será en vez de cerrar, esconderlo, pero no me gustaría dejarlo abierto porque en realidad, nunca se vuelve a dicho formulario. 
    viernes, 20 de febrero de 2015 12:15