2016-06-15 15 views
0

Meine Frage scheint sehr einfach, aber es ist wirklich ziemlich schwierig. Ich suche hier viel und finde nichts Schlüssiges.Wie man ein Formular schließt und zum Mainform zurückkommt

Ich habe ein Hauptformular, das ständig geöffnet sein muss. Ich habe einen Knopf, der ein Formular2 aufruft, ich mache eine Aktion darauf, dann rufe ich ein Formular3 auf, das dem Benutzer erlaubt, einen Gegenstand auszuwählen, ihn dann zu schließen und zum Hauptformular zurückzukehren. Der schwierige Teil ist, dass ich Daten von f3 zu f1 übergeben muss.

Mein Problem ist, auf der zweiten Form habe ich eine nächste & Abbrechen-Tasten (und eine Schließen-Taste). Next button hide f2, form1 "komm zurück" & rufe das form3 auf. Warum nicht direkt das Formular3 aufrufen? weil ich Daten von form3 zu form1 übergeben muss, damit ich Formular3 von Form1 aufrufen kann. Also ich möchte Cancelbutton (und schließend Knopf) zu form1 zurückkommen, ohne form3 aufzurufen. Ich bin nicht sicher, hier ist also klar zu sein, meinen Code

public partial class Form1 : Form 
    { 
private void bouya_Click(object sender, EventArgs e) 
     { 
      Form2 form2 = new Form2(); 
      form2.ShowDialog(); 

      Form3 form3 = new Form3(); //it opens when form2 closes!!! 
      form3.ShowDialog(); 

      string data1 = form3.label2.Text; //the data i need, without calling form3 from here i can't pass data !!! 
      //do some action with data1 

     } 
    } 

form2 sehr einfach

public partial class Form2 : Form 
    { 
    private void Next_Click(object sender, EventArgs e) 
     { this.Hide(); } 
    private void Cancel_Click(object sender, EventArgs e) 
     {//i just want here to cancel winform3 to be called} 
    private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
     { // Actually this command does'nt work at all i tried 
//to put a messagebox.Show("bla") nothing happens but i would like to do the same} 

}

Und form3 ich aus einer Liste wählen Sie ein Element ist senden an form1

Ok für einige von euch scheint mein Problem nutzlos und ich komplizierte meinen Code für nichts, aber ich brauche diese wirklich für m. (und ich muss form3 von form1 öffnen, um Daten 3 zu 1 zu senden)

Vergiss über * Form1 form1 = new Form1(); es ruft eine neue form1 an und ich will es nicht!

Antwort

1

Sie müssen form3 von form1 nicht aufrufen, nur um einen Wert zu übergeben. Wenn ich Sie richtig verstanden habe, sollte die gewünschte Strömung wie diese So

form1 
    opens 
    form2 
     opens 
     form3 
      | 
      | value 
      | 
form1 <---+ 

sein form1form2 öffnet die form3 und der Wert von form3 öffnet sollte zurück zu form1 direkt übergeben werden?

Was ich tun würde, ist eine Eigenschaft ValuePickedInForm3 oder was auch immer in form2 erklären und erhalten diese in form1 wenn form2 schließt.

Beispiel

Dieser Pseudo-Code ist in der form2 Klasse

public string ValueFromForm3 
{ 
    get; 
    private set; 
} 


public void ShowForm3() 
{ 
    using (Form3 f3 = new Form3()) 
    { 
     if (f3.ShowDialog(this) == DialogResult.OK) 
      ValueFromForm3 = f3.TheValueYouNeed; 
    } 
} 

Dieser Pseudo-Code in die form1 Klasse geht:

public void ShowForm2() 
{ 
    using (Form2 f2 = new Form2()) 
    { 
     if (f2.ShowDialog(this) == DialogResult.OK) 
      DoSomethingWith(f2.ValueFromForm3); 
    } 
} 
+0

so clever ist, kann ich nicht Ich muss schreiben Form3 von Form1 und ich kann Form2 leicht schließen. Perfekt, danke !! und was ist mit Abschlussereignis? keine Ahnung warum funktioniert das nicht ?! (das Ereignis!) – jsls

+0

Wenn Sie einen Event-Handler deklarieren, müssen Sie ihn auch an das Event anhängen * - Ich sehe nicht, wo Sie das gemacht haben. Wie auch immer, ich habe nicht verstanden, was Sie mit dem Event-Handler erreichen wollten. Da 'ShowDialog' die aktuelle Code-Kette blockiert, bis der Dialog sowieso geschlossen wird, hat das keinen Vorteil.Also habe ich mich nicht gefragt oder etwas darüber geschrieben :-D –

Verwandte Themen