web-dev-qa-db-fra.com

Comment ouvrir un nouveau formulaire à partir d'un autre formulaire

J'ai un formulaire qui est ouvert en utilisant la méthode ShowDialog. Dans ce formulaire, j'ai un bouton appelé Plus . Si nous cliquons sur Plus, il devrait ouvrir un autre formulaire et fermer le formulaire actuel.

sur le gestionnaire d'événements Click du bouton More Button, j'ai écrit le code suivant

MoreActions objUI = new MoreActions (); 
objUI.ShowDialog();
this.Close();

Mais ce qui se passe, c’est qu’il ne ferme pas le premier formulaire. Donc, j'ai modifié ce code pour 

MoreActions objUI = new MoreActions (); 
objUI.Show();
this.Close();

Ici, le deuxième formulaire est affiché et en quelques secondes les deux formulaires sont fermés.

Quelqu'un peut-il m'aider s'il vous plaît à résoudre le problème. Ce que je dois faire est, si nous cliquons sur le bouton Plus, il devrait ouvrir un autre formulaire et fermer le premier formulaire.

Toute aide me sera vraiment utile.

44
Dinesh

À mon avis, le formulaire principal devrait être responsable de l’ouverture des deux formulaires enfants. Voici un pseudo qui explique ce que je ferais:

// MainForm
private ChildForm childForm;
private MoreForm moreForm;

ButtonThatOpenTheFirstChildForm_Click()
{
    childForm = CreateTheChildForm();
    childForm.MoreClick += More_Click;
    childForm.Show();
}

More_Click()
{
    childForm.Close();
    moreForm = new MoreForm();
    moreForm.Show();
}

Vous aurez juste besoin de créer un événement simple MoreClick dans le premier enfant. Le principal avantage de cette approche est que vous pouvez le répliquer à votre guise et vous pouvez très facilement modéliser une sorte de flux de travail de base.

47
Johann Blais

Si je vous ai bien compris, essayez-vous comme ça? 

alt text

dans ceci?
alt text

dans votre Form1 , ajoutez cet événement à votre bouton:

    // button event in your Form1
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog(); // Shows Form2
    }

puis, dans votre Form2 ajoutez également cet événement dans votre bouton:

    // button event in your Form2
    private void button1_Click(object sender, EventArgs e)
    {
        Form3 f3 = new Form3(); // Instantiate a Form3 object.
        f3.Show(); // Show Form3 and
        this.Close(); // closes the Form2 instance.
    }
36
yonan2236

ok donc j'ai utilisé ça:

public partial class Form1 : Form
{
    private void Button_Click(object sender, EventArgs e)
    {
        Form2 myForm = new Form2();
        this.Hide();
        myForm.ShowDialog();
        this.Close();
    }
}

Cela semble fonctionner correctement, mais le premier formulaire est simplement masqué et peut toujours générer des événements. le "this.Close ()" est nécessaire pour fermer le premier formulaire mais si vous voulez toujours que votre formulaire soit exécuté (et ne se comporte pas comme un lanceur), vous DEVEZ le remplacer par 

this.Show();

Bonne chance!

13
user2584967

Je voudrais utiliser une valeur qui est définie lorsque plus de bouton est enfoncé, ferme la première boîte de dialogue, puis la forme originale teste la valeur et affiche ensuite la boîte de dialogue.

Pour l'ex 

  1. Créez trois fenêtres à partir de
  2. Form1 Form2 Form3
  3. Ajouter un bouton à Form1
  4. Ajoutez deux boutons pour former2

Formulaire 1 Code 

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private bool DrawText = false;

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
        if (f2.ShowMoreActions)
        {
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

    }

Code Form2 

 public partial class Form2 : Form
 {
        public Form2()
        {
            InitializeComponent();
        }

        public bool ShowMoreActions = false;
        private void button1_Click(object sender, EventArgs e)
        {
            ShowMoreActions = true;
            this.Close();
        }


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

Laisser form3 tel quel 

6
rerun

Essaye ça..

//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
    this.Visible = false;     // this = is the current form
    SignUp s = new SignUp();  //SignUp is the name of  my other form
    s.Visible = true;
}
3
fmp

vous pouvez considérer cet exemple

//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
    frm2.Show(this); //this will show Form2
    frm1.Hide();  //this Form will hide
}
1
Ramgy Borja

Par exemple, vous avez une Button nommée Button1. Cliquez d'abord dessus pour ouvrir la EventHandler de ce Button2 et appeler une autre Form, vous devriez écrire le code suivant sur votre Button.

your name example=form2.

form2 obj=new form2();

obj.show();

Pour fermer form1, écrivez le code suivant:

form1.visible=false; ou form1.Hide();

Vous pouvez essayer d'ajouter un bool pour que l'algorithme sache quand le bouton a été activé. Quand on clique dessus, la valeur booléenne est vérifiée, le nouveau formulaire est affiché et le dernier est fermé.

Il est important de savoir que les formulaires consomment un peu de bélier, c'est donc une bonne idée de fermer ceux que vous n'utiliserez pas au lieu de simplement les cacher. Fait la différence dans les grands projets.

0
Rafael