2010-05-01 15 views
15

Quiero cerrar el formulario actual en el que estoy (MainForm) y luego abrir otro (Formulario).Cerrando un formulario y luego llamando a otro

que he probado:

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
    this.Close(); 

    Form2 form2 = new Form2(); 
    form2.ShowDialog(); 
} 

O añadir el this.Close(); después form2.ShowDialog() tampoco funciona.

¿Alguna pista?

EDITAR: También podría agregar que agregando this.Close() después de form2.ShowDialog() se cierra solo cuando cierro el nuevo formulario. Si elijo form2.Show(), en su lugar cierra ambos formularios inmediatamente.

Respuesta

32

Cambio

this.Close(); 

Para:

this.Hide(); 

Debido a que no se puede cerrar la ventana principal de la aplicación y quieren aplicación se ejecuta después de ella. Debe ocultar el formulario principal o cambiar la ventana principal a la ventana que todavía estaba abierta.

En este caso, debe cerrar la ventana principal después de que se finalizó ShowDialog(). debe añadir al final de esta función de eventos de botón this.Close()

Su código nuevo código es:

private void buttonStartQuiz_Click(object sender, EventArgs e) 
    { 
     // hide main form 
     this.Hide(); 

     // show other form 
     Form2 form2 = new Form2(); 
     form2.ShowDialog(); 

     // close application 
     this.Close(); 
    } 
+0

Pero yo quiero para cerrarla. Aunque creo que podría ocultarlo, ¿cuando salga de form2 podría devolverlo? – elvispt

+0

@elvispt: Sí, puedes hacer eso. Cambiar esto. Cerrar(); a esto. Mostrar(); – Svisstack

+0

¿Cuál sería la forma correcta de llamar al oculto (principal) desde form2? – elvispt

-1

Se dispone a cerrar el formulario en primer lugar, debe cargar el segundo formulario en primer lugar.

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
Form2 form2 = new Form2(); 
form2.ShowDialog(); 
this.Close(); 
} 
+0

¿Lo ha probado? –

6

Usted puede meterse con Application Context pero el marco .NET ya tiene muy buen soporte para este modo de ventanas con la clase WindowsFormsApplicationBase. Su propiedad ShutdownStyle está disponible para permitir que el programa se cierre solo después de que se cerró la última ventana. Hacer que el código en Program.cs aspecto:

using System; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.ApplicationServices; // Add reference to Microsoft.VisualBasic!! 

namespace WindowsFormsApplication1 { 
    class Program : WindowsFormsApplicationBase { 
    [STAThread] 
    static void Main(string[] args) { 
     var app = new Program(); 
     app.EnableVisualStyles = true; 
     app.ShutdownStyle = ShutdownMode.AfterAllFormsClose; 
     app.MainForm = new Form1(); 
     app.Run(args); 
    } 
    } 
} 
0
Form2 frm2 = new Form2(); 
frm2.ShowDialog(); 

y

this.Close(); 

no es una buena combinación ..

frm2 realidad va a cargar, pero ni siquiera se puede verlo porque this.Close(); cerrará cada formulario en milisegundos ...

this.Hide(); 

funciona ...

0

Simplemente habilite o deshabilite el formulario en sí, en lugar de intentar cerrarlo.

Código se siente:

this.enabled = false; 

en el evento de clic o donde quiera que lo deseen.

Espero que ayude.

-1

Prueba esto:

btCancel.FindForm().Close(); 

btcancel es un botón que pone en la forma que desea cerrar.

-1
this.Visible = false; 
Form2 form2 = new Form2(); 
form2 .ShowDialog(); 
this.Close(); 
+1

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación: puede siempre comente en sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (http://stackoverflow.com/ ayuda/privilegios/comentario). – dbugger

+0

pero esta es la respuesta a su pregunta pruébalo antes de decir que no está funcionando su pregunta era Quiero cerrar th Estoy actualizando (MainForm) y luego abro un segundo (Formulario). y esta es la respuesta –

+0

Principalmente, solo necesita decir lo que hace su código, en lugar de simplemente poner líneas de código. – Cullub

-2

poner esto en forma principal

private void mainform_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      Application.Exit(); 
     } 

a mí me funcionó.

0

Simplemente reemplace esto. Cerrar(); con this.Hide(); ¡Funcionará perfectamente!

1

Esto funciona muy bien para mí ...

private void button_Name_Click(object sender, EventArgs e) 
    { 
     form_2 Form2 = new Form2(); 
     Form2.ShowDialog(); 
     this.Close(); 
    } 
+0

Si bien esto puede responder a la pregunta, es mejor explicar las partes esenciales de la respuesta y posiblemente cuál fue el problema con el código OP. – pirho

Cuestiones relacionadas