it-swarm.com.de

So öffnen Sie ein neues Formular aus einem anderen Formular

Ich habe ein Formular, das mit der ShowDialog-Methode geöffnet wird. In diesem Formular habe ich einen Button namens More . Wenn wir auf More klicken, wird ein anderes Formular geöffnet und das aktuelle Formular geschlossen.

bei Click-Handler für weitere Schaltflächen habe ich den folgenden Code geschrieben

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

Was aber passiert, ist, dass es nicht die erste Form schließt. Also habe ich diesen Code in geändert 

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

Hier wird das zweite Formular angezeigt und innerhalb von Sekunden werden beide Formulare geschlossen.

Kann mir jemand helfen, das Problem zu beheben. Was ich tun muss, ist: Wenn wir auf die Schaltfläche Mehr klicken, sollte ein anderes Formular geöffnet und das erste Formular geschlossen werden.

Jede Art von Hilfe wird mir wirklich helfen.

44
Dinesh

Meines Erachtens sollte das Hauptformular dafür verantwortlich sein, beide Kindformulare zu öffnen. Hier ist ein Pseudo, der erklärt, was ich tun würde:

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

Sie müssen nur ein einfaches Ereignis MoreClick im ersten Kind erstellen. Der Hauptvorteil dieses Ansatzes ist, dass Sie ihn bei Bedarf replizieren können und sehr einfach einige grundlegende Arbeitsabläufe modellieren können.

47
Johann Blais

Wenn ich Sie richtig verstanden habe, versuchen Sie es so? 

alt text

das sehr gut finden?
alt text

fügen Sie in Ihrer Form1 dieses Ereignis in Ihre Schaltfläche ein:

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

dann in deinem Form2 füge auch dieses Event in deinem Button hinzu:

    // 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 also habe ich das benutzt:

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

Dies scheint gut zu funktionieren, aber das erste Formular ist nur versteckt und kann immer noch Ereignisse generieren. "this.Close ()" wird benötigt, um das erste Formular zu schließen. Wenn Sie jedoch möchten, dass Ihr Formular ausgeführt wird (und nicht wie ein Launcher wirkt), MÜSSEN Sie es ersetzen 

this.Show();

Viel Glück!

13
user2584967

Ich würde einen Wert verwenden, der gesetzt wird, wenn mehr Schaltflächen beim ersten Dialog geschlossen werden und dann das ursprüngliche Formular den Wert testen und dann den dortigen Dialog anzeigen lässt.

Für die Ex 

  1. Erstellen Sie drei Fenster aus
  2. Form1 Form2 Form3
  3. Fügen Sie zu Form1 eine Schaltfläche hinzu
  4. Fügen Sie zwei Schaltflächen zu form2 .__ hinzu.

Formular 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 von 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();
        }
    }

Lassen Sie form3 so wie es ist 

6
rerun

Versuche dies..

//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

sie können dieses Beispiel betrachten

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

Beispielsweise haben Sie eine Button mit dem Namen Button1. Klicken Sie zuerst darauf, um die EventHandler dieses Button2 zu öffnen, um eine andere Form aufzurufen. Schreiben Sie den folgenden Code in Ihren Button.

your name example=form2.

form2 obj=new form2();

obj.show();

Um form1 zu schließen, schreiben Sie den folgenden Code:

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

Sie könnten versuchen, einen Bool hinzuzufügen, damit der Algorithmus weiß, wann die Schaltfläche aktiviert wurde. Wenn es angeklickt wird, prüft der Bool true, das neue Formular wird angezeigt und das letzte wird geschlossen.

Es ist wichtig zu wissen, dass Formulare etwas RAM verbrauchen (zumindest ein wenig). Daher ist es eine gute Idee, diejenigen zu schließen, die Sie nicht verwenden werden, anstatt sie nur zu verstecken. Macht den Unterschied bei großen Projekten.

0
Rafael