2010-12-04 172 views
2

每當我單擊窗體的紅色十字關閉按鈕時,我想顯示另一個窗體,但儘管已關閉事件處理程序,但我無法打開另一個窗體。Form.closed事件不會觸發

這是如何我試圖打開另一種形式:

private void Form1_Closed(object sender, System.EventArgs e) 
{ 
    itemMaster.Show(); 

} 

誰能告訴我怎麼可以讓我的需求量的?

回答

5

首先,你應該使用FormClosed事件,而不是Closed

Closed事件是在.NET Framework 2.0版過時;請改用FormClosed事件。MSDN page for the Form.Closed event

void Form1_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    // ... 
} 

其次,確保你實際上已經訂閱了Form1FormClosed事件:

Form1.FormClosed += Form1_FormClosed; 

Windows窗體設計器會自動在過某處InitializeComponent添加類似的一行。如果沒有,那就是爲什麼你的處理程序方法沒有被調用。

如果這仍然沒有幫助,請嘗試處理FormClosing事件尾部FormClosed

+0

+1'FormClosed'over'Closed`。 – 2010-12-04 10:48:40

4

如果你用下面的語句開始您的應用程序:

Application.Run(new Form1()); 

當您關閉Form1,您的應用程序將退出。即使你打開另一個表單,它將在應用程序退出時被殺死。你可以通過在你的Form1_Closed方法中添加一個斷點並確定斷點被觸發來確保是這種情況嗎?

如果是這種情況,會發生什麼情況是您的代碼會執行,但是自從應用程序退出後,您的另一個窗體會在打開時立即關閉。

要修復該問題,請使用Hide() form1而不是關閉它。處理Form_Closing事件並調用this.Hide()並設置e.Cancel = true

+0

+1 - 這也是我最初的想法。 – 2010-12-04 10:49:17

0

當您完成表單並想關閉表單時(例如,通過點擊關閉按鈕),請務必使用Close()。我的form_closing事件沒有解僱,因爲我在點擊關閉按鈕時只使用了Dispose()

我認爲關閉表單的最好方法是同時使用Close()Dispose()

  • Close() =>如果你需要關閉窗體時做一些事情...
  • Dispose() =>破壞形式(清理資源)。

    private void _btnClose_Click(object sender,EventArgs e) { Close(); Dispose(); }