Cerrar un formulario y luego llamar a otro

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

He intentado:

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

O agregando el this.Close(); después de form2.ShowDialog() tampoco funciona.

¿Algún consejo?

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

Cambio

 this.Close(); 

A:

 this.Hide(); 

Porque no puede cerrar la ventana de la aplicación principal y desea que la aplicación se ejecute después de ella. Debe ocultar el formulario principal o cambiar la ventana principal a la ventana que aún estaba abierta.

En este caso, debe cerrar la ventana principal después de que ShowDialog() haya finalizado. Luego debe agregar al final de este botón la función de evento 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(); } 

Puede meterse con ApplicationContext, pero .NET Framework ya tiene un buen soporte para este modo de ventana con la clase WindowsFormsApplicationBase. Su propiedad ShutdownStyle está disponible para permitir que el progtwig se cierre solo después de que se cerró la última ventana. Haga que el código en Program.cs se vea así:

 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); } } } 

Esto funciona bien para mi…

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

y

 this.Close(); 

no es una buena combinación ..

frm2 se cargará realmente pero no puedes verlo porque this.Close(); cerrará todas las formas solo en un milisegundo …

 this.Hide(); 

trabajos…

Simplemente active o desactive el formulario en sí, en lugar de intentar cerrarlo.

Codifíquelo como:

 this.enabled = false; 

en el evento click o donde lo desee.

Espero eso ayude.

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

Primero cierra el formulario, primero debe cargar el segundo formulario.

 private void buttonStartQuiz_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); this.Close(); } 
 this.Visible = false; Form2 form2 = new Form2(); form2 .ShowDialog(); this.Close(); 
 new play().Show(); this.Dispose(); 

Prueba esto:

 btCancel.FindForm().Close(); 

btcancel es un botón que se establece en el formulario que desea cerrar.

Ponlo en forma principal

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

Trabajó para mi.