閱讀481 返回首頁    go 小米 go 小米5


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

  上一篇:go JavaWeb將圖片顯示在瀏覽器中
  下一篇:go 關於招行信用卡還款日期的幾個注意問題