Form.Show ? Form.ShowDialog ?

在討論區請問close, dispose與form的關係這篇文章中,提到有關Form的一些關閉事件的問題
,其中有關ShowDialog的部分在Windows Form上面也是相同的,大家可以參考一下。

Note. 部分說明是針對WIndows Mobile平台,部分內容與Windows Form是互通的

在討論區請問close, dispose與form的關係這篇文章中,提到有關Form的一些關閉事件的問題

,其中有關ShowDialog的部分在Windows Form上面也是相同的,大家可以參考一下。

你可以用下面程式碼來觀察事件發生的順序(我使用的是VB)


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中輸入的字。