2013-10-23 2 views
3

2 양식이 있습니다. Form1과 Form2. form1에서 버튼을 클릭하면 폼 2를 열고 form1을 숨 깁니다.Form2를 닫고 Form1을 표시하십시오.

하지만 지금 Form2를 닫고 form1을 표시하면 어떻게하는지 알 수 없습니다.

질문 번호 2 : Form1 (레이블, 단추)의 요소에 대한 Update() 메서드가있는 경우. form2에서이 메서드를 사용할 수 있습니까?

감사

답변

0

요청한 두 가지 질문 모두 쉽게 이벤트로 해결할 수 있습니다. Form1에가 iteself을, 형식 2를 만들 자사의 이벤트를 등록, 숨길 Form1을 유발의 버튼을 클릭

public partial class Form2 : Form 
{ 
    //Declare your event 
    public event EventHandler updateEvent; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     //If the event is registered fire it, otherwise do nothing 
     if (updateEvent != null) 
     { 
      //fire the event and give our custom event args some text 
      updateEvent(sender, e); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     //Another way to close the form, beside clicking the red "X" 
     Close(); 
    } 
} 

, 그리고 쇼 :

를 Form1 :

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

    private void button1_Click(object sender, EventArgs e) 
    { 
     //Declare your new form 
     Form2 form2 = new Form2(); 

     //Register the update event 
     form2.updateEvent += new EventHandler(handleUpdateEvent); 

     //Register form closed event 
     form2.FormClosed += new FormClosedEventHandler(form2_FormClosed); 

     Visible = false; 

     //Show your new form 
     form2.Show(); 
    } 

    void form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     this.Visible = true; 
    } 

    //Handler for the event from form 2 
    void handleUpdateEvent(object sender, EventArgs e) 
    { 
     this.BackColor = Color.Red; 
    } 
} 

Form2를 여기에 코드입니다 form2. "업데이트 버튼"(form2의 button1)을 클릭하면 Form1에서 일부 업데이트가 수행됩니다. 이 데모에서는 Form1의 배경색 만 변경합니다. form2가 닫히면 닫힌 이벤트는 form1로 다시 실행됩니다. 그러면 form1이 다시 표시되도록하여 이벤트를 처리합니다.

0

는 형식 2의 Form.FormClosing를 Form1에 대한 이벤트 처리기를 추가합니다. 발생하면 Form1을 다시 표시하십시오.

4

이벤트는 FormClosing 이벤트를 사용해야합니다. form2을 작성중인 코드에서 form1을 종료 이벤트에 첨부하십시오. 이것은 form1form2을 알게 된 이유입니다.

private void OpenForm() 
{ 
    var form2 = new Form2(); 
    form2.FormClosing += FormIsClosing; 
    form2.Show(); 

    this.Hide(); 
} 

private void FormIsClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.Cancel) 
    { 
     return; 
    } 

    this.Show(); 
    this.Update(); 
} 
+0

이 작업을 수행하지 마십시오. Form2는 Form1에 대해 알 필요가 없습니다. Form1에 FormClosing 이벤트 처리기를 넣으면됩니다. e.Cancel을 반드시 확인하십시오. 그리고 소유자가 더 이상 설정할 필요가 없다는 것에주의하십시오, 그냥 * this *입니다. –

+1

@HansPassant 사실, 고맙습니다. 내가 왜 다른 방식으로했는지 모르겠다. (그러나 내 코드를 바꿨다. – gzaxx

관련 문제