WinForm下
例如
如果模式窗體顯示一個新視窗
new Form1().ShowDialog()
在From1裡
直接關閉窗體或者處罰Close()并不會真正的關閉窗體,隻是将窗體隐藏而已.
至于原因,如果Close直接銷毀窗體資源的話,那麼必要的時候,擷取DialogResult就無法擷取了.
必須顯示調用Dispose()來關閉窗體.
以下是MSDN的關于模式窗體的備注
可以使用此方法在應用程式中顯示模式對話框。調用此方法時,直到關閉對話框後,才執行此方法後面的代碼。可以将
DialogResult枚舉值之一配置設定給對話框,方法是将該值配置設定給窗體上 Button 的 DialogResult 屬性或通過使用代碼設定窗體的 DialogResult 屬性。此方法随後傳回該值。可以使用此傳回值确定如何處理對話框中發生的操作。例如,如果關閉了對話框,并通過此方法傳回了
DialogResult.Cancel值,則可防止執行在調用
ShowDialog之後的代碼。
當窗體顯示為模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隐藏窗體并将
DialogResult屬性設定為
DialogResult.Cancel。與無模式窗體不同,當使用者單擊對話框的關閉窗體按鈕或設定
DialogResult屬性的值時,.NET Framework 不調用 Close 方法。窗體轉而可以隐藏并可重新顯示,而不用建立該對話框的新執行個體。因為未關閉顯示為對話框的窗體,是以在您的應用程式不再需要該窗體時,必須調用該窗體的 Dispose 方法。
ShowDialog方法的此版本不将窗體或控件指定為其所有者。當調用此版本時,使目前活動視窗成為該對話框的所有者。如果要指定特定所有者,請使用此方法的其他版本。
