none
Acceder al form principal RRS feed

  • Pregunta

  • Muy buenas noches, me refiero a ustedes con una consulta a la cual no encuentro una respuesta exacta, verán mi problema es el siguiente: Deseo hacer un juego sencillo a través de los Windows Forms, este juego tiene una pantalla de título con un botón ("Iniciar Juego") a la hora que el botón es clickeado, éste genera otro Windows Form que sería el contenedor del juego. Ahora, yo deseo ocultar la pantalla de título, ésta obviamente no puede ser cerrada debido a que es la principal y si la cierro, cerraría toda la aplicación, obviamente esto se resuelve con un .hide() en el button, pero ¿Cómo haría si yo deseo tener un botón de "Ir atras" en el Windows Form que contiene el juego?, ¿Cómo vuelvo a mostrar la pantalla de inicio?.

    Como consejo extra, ¿Está bien esto que hago? me refiero al contexto en si, a la hora de realizar un juego sencillo, es de éste modo que se realiza o hay algún método particular que se utiliza?. De antemano muchísimas gracias por la ayuda.

    domingo, 22 de febrero de 2015 4:25

Respuestas

  • Buenas tardes!!!, esta solución es muy buena, pero al hacerlo si cierro las ventanas la aplicación me queda corriendo de igual manera, tendría que programar el botón de cerrar para que realice un Application.exit()?

    No hace falta.  Simplemente debe agregar una línea de código para salir.

    Pregunto:  ¿Tiene acaso dos botones, uno de Atrás y otro de Salir?  Supongo que es algo así por el estilo.  En ese caso solamente tiene que escribir esto en el evento click del botón de salir:

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

    Aquí le dejo la clase Program con una pequeña corrección.

        static class Program
        {
            public static Form1 WelcomeForm;
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                WelcomeForm = new Form1();
                Application.Run(WelcomeForm);
            }
        }
    

    Eso funciona correctamente.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta SaintBass lunes, 23 de febrero de 2015 23:07
    lunes, 23 de febrero de 2015 20:03

Todas las respuestas

  • El asunto, como bien parece saberlo, es Hide().  Con Hide() el programa no termina ejecución.  El detalle sería cómo mostrar el formulario luego de haberlo cerrado, desde un botón Atrás o algo similar.

    Simplemente mantenga una referencia al formulario de bienvenida que sea accesible desde el segundo formulario.

        static class Program
        {
            public static readonly Form1 WelcomeForm = new Form1();
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(WelcomeForm);
            }
    

    Aquí creamos una variable estática del tipo del formulario de bienvenida (usé Form1 como ejemplo) que se usa en la llamada a Application.Run().  Ahora simplemente en el evento click del botón Atrás usted debe mostrar dicho formulario:

    private void btnAtras_Click(object sender, EventArgs e)
    {
        //Ocultamos el formulario actual.
        Hide();
        //Mostramos el formulario de bienvenida.
        Program.WelcomeForm.Show();
    }

    Esa sería la forma más sencilla.  Para escenarios más complejos, lo ideal sería cambiar la llamada a Application.Run(formulario) por Application.Run(contexto), donde contexto sería una variable de una clase que hereda de ApplicationContext.


    Jose R. MCP
    Code Samples

    domingo, 22 de febrero de 2015 5:00
  • >>yo deseo ocultar la pantalla de título, ésta obviamente no puede ser cerrada debido a que es la principal y si la cierro

    aqui explico como podrias hacerlo

    C# - Winforms, realizar tareas antes de inicializar aplicacion

    la idea es que uses el Main() que esta en Programs.cs alli inicias el form y cuando este se cierre es que asignas el Application.Run()

    no necesitas ocultar ningun form

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 22 de febrero de 2015 12:57
  • Que tal, buenas tardes y gracias por contestar, está muy bien la propuesta y es entendible la solución, pero el problema es el siguiente: Yo puedo asignar lo que describes al main()

            static void Main()
            {
                Application.EnableVisualStyles();
                PantallaInicio iniciarAplicacion = new PantallaInicio();
                iniciarAplicacion.ShowDialog();
                if (iniciarAplicacion.DialogResult == DialogResult.OK)
                {
                    Application.Run(new PantallaJuego());
                }
                }

    Pero que pasa si quiero que mi PantallaJuego tenga un botón de ir hacia atrás y muestre nuevamente la PantallaInicio y oculte la PantallaJuego?.

    lunes, 23 de febrero de 2015 19:31
  • Buenas tardes!!!, esta solución es muy buena, pero al hacerlo si cierro las ventanas la aplicación me queda corriendo de igual manera, tendría que programar el botón de cerrar para que realice un Application.exit()?
    lunes, 23 de febrero de 2015 19:33
  • >>Pero que pasa si quiero que mi PantallaJuego tenga un botón de ir hacia atrás y muestre nuevamente la PantallaInicio y oculte la PantallaJuego?.

    facil usa el

    Application.Restart()

    en el codigo de ese boton

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de febrero de 2015 19:43
  • Buenas tardes!!!, esta solución es muy buena, pero al hacerlo si cierro las ventanas la aplicación me queda corriendo de igual manera, tendría que programar el botón de cerrar para que realice un Application.exit()?

    No hace falta.  Simplemente debe agregar una línea de código para salir.

    Pregunto:  ¿Tiene acaso dos botones, uno de Atrás y otro de Salir?  Supongo que es algo así por el estilo.  En ese caso solamente tiene que escribir esto en el evento click del botón de salir:

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

    Aquí le dejo la clase Program con una pequeña corrección.

        static class Program
        {
            public static Form1 WelcomeForm;
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                WelcomeForm = new Form1();
                Application.Run(WelcomeForm);
            }
        }
    

    Eso funciona correctamente.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta SaintBass lunes, 23 de febrero de 2015 23:07
    lunes, 23 de febrero de 2015 20:03