Form.Show ? Form.ShowDialog ?

在討論區請問close, dispose與form的關係這篇文章中,提到有關Form的一些關閉事件的問題,其中有關ShowDialog的部分在Windows Form上面也是相同的,大家可以參考一下你可以用下面程式碼來觀察事件發生的順序(我使用的是VB)
Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Debug.WriteLine(Now.Ticks & ": Form Closed..")
End Sub

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Debug.WriteLine(Now.Ticks & ": Form Closing..")
End Sub

Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Disposed
Debug.WriteLine(Now.Ticks & ": Form Disposed..")
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.MinimizeBox = False
End Sub


另外預設Form的右上角會是"X"(也就是允許最小化),在"X"的時候點下去,這時候是不會把Form關閉的,而是讓Form躲起來;而設定Me.MinimizeBox = False(不允許最小化),這時候右上角會變成"OK",這時候點選的時候會把Form關閉。

要特別注意的一點,當用ShowDialog的方式去呼叫表單出來的時候,要自行在關閉Form的相關事件中呼叫Diapose,節錄部分說明如下
當表單顯示為強制回應對話方塊時,按一下 [關閉] 按鈕 (表單右上角帶有 X 的按鈕) 會將表單隱藏起來,並將 DialogResult 屬性設定為 DialogResult.Cancel。不像非強制回應表單,當使用者按一下對話方塊的關閉表單按鈕或設定 DialogResult 屬性值時,.NET Framework 不會呼叫 Close 方法。反而表單會隱藏並可再次顯示,不需建立對話方塊的新執行個體。因為顯示為對話方塊的表單未關閉,當應用程式不再需要表單時,您必須呼叫表單的 Dispose 方法。


所以說,如果說Form2上面有一個TextBox,我用ShowDialog的方式把Form叫出來並且在TextBox上面打些字,關閉的時候如果沒有自行處理Dispose的部分,那麼第二次把Form呼叫出來的時候,會看到上次在TextBox中輸入的字。

留言

這個網誌中的熱門文章

開啟cshtml檔案時,出現『並未將物件參考設定為物件執行個體』的錯誤訊息

無法設定中斷點 尚未載入符號檔

DataGridView欄位計算總合