首頁  >  文章  >  後端開發  >  C# Show()與ShowDialog()的差別

C# Show()與ShowDialog()的差別

黄舟
黄舟原創
2017-02-25 10:53:102632瀏覽

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()修改為視窗隱藏。

 以上就是C# Show()與ShowDialog()的差別的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn