2016-04-22 7 views
1

Ich habe 3 Forms3 Formen, in der Nähe der 2. und 3. offen

//Example: 
public Form 1; 
public Form 2; 
public Form 3; 

Wenn ich mein Programm starten Sie es in Form1 ist. Ich öffne Form2 von Form1

Form2 f2 = new Form2(); 
this.Hide() //Save in memory 
f2.ShowDialog(); 
this.Show(); 

So in Form2. Ich öffne form3

Form2 f3 = new Form2(); 
this.Close() //Trying Destroy Form2 and open Form3. 
f3.ShowDialog(); 
this.Show(); 

Schließlich würde Ich mag neue Form2 öffnen (alle Daten neu zu laden) aus Form3 Aber ich nicht tun. wie man es repariert?

+2

Wenn Sie möchten, dass Form2 Daten neu lädt, verwenden Sie einfach Form3 als Dialogfeld von Form2 und lösen die Änderung über Eigenschaften aus, die beim Schließen zurückgegeben werden. Sie sollten keine zweite Instanz von Form2 öffnen, es sei denn, Sie möchten wirklich 2 Instanzen. –

+0

Wie sollte ich das Form2 aktualisieren? @ChrisFannin kann Beispielcode bereitstellen? – user2422414

+0

Mark Hall lieferte unten ein anständiges Beispiel, obwohl ich eine etwas andere Route gewählt hätte. Da es sehr spät ist, kann ich momentan kein eigenes Beispiel aufstellen. –

Antwort

0

Sie können this.Show() nicht aufrufen, nachdem Sie f3.ShowDialog() aufgerufen haben, da ShowDialog() ein modales Fenster öffnet, das alle anderen UI-Threads blockiert, so dass nachfolgende Anweisungen nicht ausgeführt werden, bis das modale Fenster geschlossen wird.

+0

Ja. Also, was soll ich tun, um meine Aufgabe zu erfüllen? – user2422414

0

Sie sagen nicht, was Sie für eine Datenquelle verwenden oder wie Sie Ihr 2. Formular aktualisieren. Ich persönlich hätte alles basierend auf dem ersten Formular mit dem Dialog Ergebniswert, um zu bestimmen, ob das zweite Formular neu geladen werden soll.

Etwas wie folgt aus:

Form1

public partial class Form1 : Form 
{ 
    Form2 f2; 
    Form3 f3; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     f2 = new Form2(); 
     f2.FormClosing += F2_FormClosing; 
     this.Hide(); 
     f2.Show(); 
    } 

    private void F2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (((Form2)sender).DialogResult == DialogResult.OK) 
     { 
      f3 = new Form3(); 
      f3.FormClosing += F3_FormClosing; 
      f3.Show(); 
     } 
     else 
     { 
      this.Visible = true; 
     } 

    } 

    private void F3_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (((Form3)sender).DialogResult == DialogResult.OK) 
     { 
      f2 = new Form2(); 
      f2.FormClosing += F2_FormClosing; 
      f2.Show(); 
     } 
     else 
     { 
      this.Visible = true; 
     } 
    } 
} 

Form2

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

    private void button1_Click(object sender, EventArgs e) 
    { 
     DialogResult = DialogResult.OK; 
     this.Close(); 
    } 
} 

Form3

0

Es sollte wie sein

In Form 2

Form3 f3 = new Form3(); 
f3.show(); //shouldn't use ShowDialog since it will block the thread 
this.close(); 

In Form 3, nur eine neue Instanz von Form2 erstellen und zeigen Sie es, wie Sie wollen.

Verwandte Themen