C# Show()與ShowDialog()的區別
A.WinForm中窗體顯示
顯示窗體可以有以下2種方法:
Form.ShowDialog方法 (窗體顯示為模式窗體)
Form.Show方法 (窗體顯示為無模式窗體)
兩者具體區別如下:
1.在調用Form.Show方法後,Show方法後麵的代碼會立即執行
2.在調用Form.ShowDialog方法後,直到關閉對話框後,才執行此方法後麵的代碼
小注:
1、模態顯示後,
彈出窗口阻止調用窗口的所有消息響應。
隻有在彈出窗口結束後調用窗口才能繼續。
在模態窗口“關閉”後,可以讀取模態窗口中信息,包括窗口的返回狀態,窗口子控件的值。
MSDN上對showdialog的解釋:
當窗體顯示為模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隱藏窗體並將 DialogResult 屬性設置為 DialogResult.Cancel。與無模式窗體不同,當用戶單擊對話框的關閉窗體按鈕或設置 DialogResult 屬性的值時,.NET Framework 不調用 Close 方法。窗體轉而可以隱藏並可重新顯示,而不用創建該對話框的新實例。因為未關閉顯示為對話框的窗體,所以在您的應用程序不再需要該窗體時,必須調用該窗體的 Dispose 方法。
也就是說,非模態窗口在關閉時,會調用close方法,進而調用dispose方法,將窗口資源進行回收,所以窗口關閉後,不能在獲取窗口信息。模態窗口在關閉時,不會調用close方法,也不調用dispose方法,窗口仍然存在,占有資源,所以可以繼續獲得窗口相關信息,在窗口不再使用時,需要手動釋放
2、非模態顯示後,
可以在彈出窗口和調用窗口之間隨意切換。
調用窗口調用show方法後,下麵的代碼可以立即執行。
在非模態窗口關閉後,窗口的所有資源被釋放,窗口不存在,無法獲取窗口的任何信息。
3、故當要show的窗體使用單例模式時,每次show完,close()窗體後,在第二次show的時候會出現:無法訪問已釋放的對象。對象名:“XXXX”。 此時,應該將close()修改為窗體隱藏。
最後更新:2017-04-03 20:19:20