1. 程式人生 > >C# show和showdialog區別

C# show和showdialog區別

更多 comm isp 應該 常見 解釋 方式 不存在 close

簡單地說他們的區別就是show彈出來的窗體和父窗體(上一個窗體的簡稱)是屬於同一等級的,這兩個窗體可以同時存在而且可以隨意切換,但是showdialog彈出來的窗體就不能這樣,他永遠是被置頂的,如果不關閉這個窗體,那就不能使用別的窗體。

所以說相對於show來說我感覺showdialog更多了一種強制性。所以這兩種方法雖然都是彈出窗體,但是程序員需要根據需要來選擇使用

在C#中窗口的顯示有兩種方式:模態顯示(showdialog)和非模態顯示(show)。
二者最常見的區別是:

模態顯示後,
彈出窗口阻止調用窗口的所有消息響應。
只有在彈出窗口結束後調用窗口才能繼續。
在模態窗口“關閉”後,可以讀取模態窗口中信息,包括窗口的返回狀態,窗口子控件的值。

非模態顯示後,
可以在彈出窗口和調用窗口之間隨意切換。
調用窗口調用show方法後,下面的代碼可以立即執行。
在非模態窗口關閉後,窗口的所有資源被釋放,窗口不存在,無法獲取窗口的任何信息。

MSDN上對showdialog的解釋:

當窗體顯示為模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隱藏窗體並將 DialogResult 屬性設置為 DialogResult.Cancel。與無模式窗體不同,當用戶單擊對話框的關閉窗體按鈕或設置 DialogResult 屬性的值時,.NET Framework 不調用 Close 方法。窗體轉而可以隱藏並可重新顯示,而不用創建該對話框的新實例。因為未關閉顯示為對話框的窗體,所以在您的應用程序不再需要該窗體時,必須調用該窗體的 Dispose 方法。

  1. Form2 testDialog = new Form2();
  2. if (testDialog.ShowDialog(this) == DialogResult.OK)
  3. {
  4. this.txtResult.Text = testDialog.TextBox1.Text; // 窗口關閉後,還可以繼續訪問窗口的子控件值
  5. }
  6. else
  7. {
  8. this.txtResult.Text = "Cancelled";
  9. }
  10. // 關閉窗口
  11. // 其他操作
  12. ......
  13. ......
  14. testDialog.ShowDialog(); // 模態窗口關閉後,可以再次顯示出來
  15. testDialog.Dispose(); // 當模態窗口不再使用時,應該調用dispose方法釋放資源
  16. Form2 test = new Form2();
  17. test.Show(); // 非模態顯示
  18. // 關閉窗口
  19. // 其他操作
  20. ......
  21. ......
  22. test.Show(); // 異常,因為在test關閉時,窗口已經被徹底銷毀了,這裏必須重新新建一個窗口,然後顯示
  23. // 修改為如下
  24. test = new Form2(); // 創建一個新窗口,重新分配空間
  25. test.Show(); // 顯示窗口

C# show和showdialog區別