2016-06-15 15 views
0

私の質問はとても簡単ですが、実際は非常に難しいです。私はここで多くを検索し、決定的なものは何も見つかりません。フォームを閉じてメインフォームに戻る方法

私は常に開いている必要があるメインフォームを持っています。私はform2を呼び出すボタンを持っています。私はいくつかのアクションを行い、form3を呼び出してユーザーがいくつかのアイテムを選択して閉じ、mainformに戻ってくるようにします。トリッキーな部分は、私はf3からf1にデータを渡す必要があります。

私の問題は、2番目のフォームで次の&キャンセルボタン(および閉じるボタン)があることです。次のボタンはf2を非表示にし、form1は "戻る" &フォーム3を呼び出します。なぜform3を直接呼び出さないのですか?私はform3からform1にデータを渡す必要があるので、はform1からform3を呼び出す必要があります。 私は、フォーム3を呼び出さずに、フォーム1に戻りたいCancelbutton(と閉じるボタン)をします。私は

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} 

}

そしてたForm3私は、リストから項目を選択

をForm1に送信されるので、ここで理解

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のは非常に簡単です私のコードだことがわかりません

public partial class Form3 : Form 
{ 
    private void button1_Click(object sender, EventArgs e) 
      { 
       foreach (Object obj in listBox1.SelectedItems) 
       { 
        label2.Text = obj.ToString(); 
        this.Hide(); 
       } 
      } 
    } 

私の問題は役に立たないように見えますが、私のコードは何も複雑にしませんでしたが、本当に必要ですm。 (そして、私はform3からdata3を1に送るためにform3を開く必要があります)

忘れています* Form1 form1 = new Form1();それは新しいform1を呼び出し、私はそれを望んでいない!

答えて

1

実際に値を渡すためにform1からform3を呼び出す必要はありません。私が正しくあなたを理解していれば、所望の流れはそうform1form3を開き、form3からの値が右、バックform1に渡されるべきform2を開き、この

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

ようにすべきですか?私はどうだろう何

form2で財産ValuePickedInForm3または何を宣言し、form2が閉じたときform1でこれを取得することです。

この擬似コードはform2クラスである

public string ValueFromForm3 
{ 
    get; 
    private set; 
} 


public void ShowForm3() 
{ 
    using (Form3 f3 = new Form3()) 
    { 
     if (f3.ShowDialog(this) == DialogResult.OK) 
      ValueFromForm3 = f3.TheValueYouNeed; 
    } 
} 
この擬似コードは form1クラスに入る

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

賢いですが、私はしないでくださいform1からpen3に書き込まなければならず、簡単にform2を閉じることができます。完璧なありがとう! 閉じるイベントはどうですか?どんなアイデアでもうまくいかないのはなぜですか? (イベント!) – jsls

+0

イベントハンドラを宣言するときには、イベントに*アタッチする必要もあります。とにかく、私はあなたがイベントハンドラを使って達成したいことを理解していませんでした。とにかくダイアログが閉じられるまで、 'ShowDialog'は現在のコードチェーンをブロックするので、利点はありません。だから私はそれについて何かを尋ねたり書き込んだりしていませんでした.-D –

関連する問題