web-dev-qa-db-fra.com

Fermer un formulaire puis en appeler un autre

Je veux fermer le formulaire actuel sur lequel je suis (MainForm), puis en ouvrir un deuxième (Formulaire).

J'ai essayé:

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

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

Ou l'ajout de this.Close(); après form2.ShowDialog() ne fonctionne pas non plus.

Des allusions?

EDIT: Vous pouvez également ajouter qu’en ajoutant this.Close() après form2.ShowDialog(), il ne se ferme que lorsque je ferme le nouveau formulaire . Si je choisis form2.Show(), il ferme immédiatement les deux formulaires.

15
elvispt

Changement

this.Close();

À:

this.Hide();

Parce que vous ne pouvez pas fermer la fenêtre principale de l'application et que vous souhaitez que l'application s'exécute après celle-ci, vous devez masquer le formulaire principal ou modifier la fenêtre principale en fenêtre qui était toujours ouverte.

Dans ce cas, vous devez fermer la fenêtre principale après la fin de ShowDialog() . Ensuite, vous devez ajouter à la fin de cette fonction bouton la fonction this.Close().

Votre code nouveau code est:

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();
    }
34
Svisstack

Vous pouvez jouer avec ApplicationContext mais le framework .NET supporte déjà très bien ce mode de fenêtrage avec la classe WindowsFormsApplicationBase. Sa propriété ShutdownStyle est disponible pour laisser le programme s’arrêter uniquement après la fermeture de la dernière fenêtre. Faites en sorte que le code dans Program.cs ressemble à ceci:

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);
    }
  }
}
6
Hans Passant

Cela fonctionne bien pour moi ...

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

Il suffit de remplacer this.Close (); avec this.Hide (); Cela fonctionnera parfaitement!

0
Essam Mohamed

Activez ou désactivez simplement le formulaire lui-même, au lieu d'essayer de le fermer. 

Code le comme:

this.enabled = false;

dans l'événement de clic ou où vous le voulez.

J'espère que ça aide.

0
rrkbca86
Form2 frm2 = new Form2();
frm2.ShowDialog();

et

this.Close();

n'est pas une bonne combinaison ..

frm2 va charger, mais vous ne pouvez même pas le voir car this.Close(); ferme chaque formulaire en une milliseconde ...

this.Hide();

travaux...

0
nicOL