2016-06-15 2 views
0

내 질문은 매우 쉽지만 실제로는 매우 까다 롭습니다. 나는 여기에서 많은 것을 찾는다. 그리고 나는 결정적인 것을 발견하지 않는다.양식을 닫고 메인 폼으로 돌아 오는 방법

나는 항상 열려 있어야하는 mainform이있다. 나는 form2를 호출하는 버튼을 가지고있다. 나는 그것에 액션을 한 다음 form3을 호출하여 사용자가 어떤 아이템을 선택하고 닫고 mainform으로 되돌아 올 수있게한다. 까다로운 부분은 f3에서 f1으로 데이터를 전달해야합니다.

내 문제는 두 번째 양식에서 다음 버튼 & 취소 버튼 (및 닫기 버튼)입니다. 다음 버튼은 f2를 숨기고, form1은 "돌아와"& 양식을 호출하십시오. 왜 form3에 직접 전화하지 않으시겠습니까? form3에서 form1로 데이터를 전달해야하므로 이 form1에서 form3을 호출해야합니다. 그래서 Form3을 호출하지 않고 Cancelbutton (및 닫기 버튼)을 form1로 되돌리려합니다. 나는

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

내 문제는 쓸데없는 것 같아요. 코드를 복잡하게 만들었지 만, 정말 필요합니다. 엠. (그리고 form3을 열어 데이터 3에서 1로 보낼 필요가 있습니다.)

* Form1 form1 = new Form1(); 그것은 새로운 form1을 호출하고 나는 그것을 원하지 않는다!

답변

1

사실 form1에서 form3을 호출 할 필요가 없습니다. 내가 제대로 이해하면 원하는 흐름은 그래서 form1 오른쪽 form3form3의 값이 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에서 펜 form3에 wrry해야하고 쉽게 form2 닫을 수 있습니다. 완벽한 감사합니다 !! 및 종료 이벤트는 어떻게됩니까? 어떤 생각이 왜 효과가 없나요?! (이벤트!) – jsls

+0

이벤트 처리기를 선언 할 때 이벤트 *에 첨부해야합니다. * 내가 어디서 그 작업을했는지는 알 수 없습니다. 어쨌든, 당신이 이벤트 핸들러를 사용하여 달성하기를 원하는 것을 이해하지 못했습니다. 어쨌든 대화 상자가 닫힐 때까지'ShowDialog'이 현재 코드 체인을 차단하므로 이점이 없습니다.그래서 그것에 대해 묻거나 글을 쓰지는 않았다 .-D –

관련 문제