2013-10-23 53 views
3

我有2個窗體。 Form1和Form2。在form1中是一個按鈕,當我點擊它時,然後打開form2並隱藏form1。關閉窗體2並顯示窗體1

但現在,我不知道該怎麼辦,如果我關閉Form2並顯示form1。

問題2: 如果我在Form1(標籤,按鈕)中的元素的窗體方法Update()中。我可以在form2中使用這種方法嗎?

感謝

回答

0

您提出的兩個問題都可以通過事件輕鬆解決。下面是代碼:

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

窗體2:

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上引起Form1以創建窗口2,註冊自己的事件,隱藏iteself,並顯示窗體2。當「更新按鈕」(form2的button1)被點擊時,它將在Form1上進行一些更新。對於這個演示,我只是改變Form1的背景顏色。當form2關閉時,其關閉的事件將觸發回form1,這將通過使其自身再次可見來處理事件。

4

您必須使用FormClosing事件。在您的代碼中,您正在創建form2將您的form1附加到結束事件。這就是爲什麼你的form1將知道form2正在關閉。

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的任何信息。只需將FormClosing事件處理程序放在Form1中。不要忘記檢查e.Cancel。並且請注意,您不需要再設置所有者,它只是* this *。 –

+1

@HansPassant true,非常感謝。我不知道爲什麼我以其他方式做了:(但是改變了我的代碼。 – gzaxx

相關問題