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