模式視窗體即對話框,使用者必須完成操作或關閉後才能返回父視窗。本文專注 .NET WinForms 中有效使用模式視窗體及常見問題解決。
以 VS2005「選項」對話框為標準,透過設計器屬性視窗設定:
StartPosition = CenterParent:父視窗置中顯示HelpButton = true:標題列顯示說明按鈕MaximizeBox = false; MinimizeBox = false:隱藏最大化/最小化ShowIcon = false:不顯示圖示ShowInTaskbar = false:不佔用工作列空間FormBorderStyle = FixedDialog:固定對話框邊框,禁止拖曳調整大小ControlBox = false:隱藏控制按鈕(視需求)this.AcceptButton = this.buttonOK; // Enter 鍵觸發
this.CancelButton = this.buttonCancel; // Esc 鍵觸發
注意:焦點在其他按鈕時 Enter 觸發該按鈕;快捷鍵操作無按下視覺效果。
OptionForm form = new OptionForm();
form.ShowDialog(this); // 指定擁有者,模式視窗內可透過 this.Owner 存取父視窗
// form.ShowDialog(); // 無擁有者,Owner 為 null
ShowDialog 回傳 DialogResult 列舉:OK、Cancel、Yes、No、Abort、Retry、Ignore、None。
傳統寫法註冊三個事件(FormClosing、buttonOK_Click、buttonCancel_Click)。優化:
DialogResult 屬性:buttonOK.DialogResult = DialogResult.OK; buttonCancel.DialogResult = DialogResult.Cancel;buttonOK_Click,驗證失敗時設 this.DialogResult = DialogResult.None; 阻止關閉代碼減少一半,邏輯更清晰。
| 類別 | 功能 | 基類 | 可繼承 |
|---|---|---|---|
| MessageBox | 訊息框(靜態 Show 方法多重載) | — | 否 |
| OpenFileDialog | 開啟檔案 | FileDialog | 否 |
| SaveFileDialog | 儲存檔案 | FileDialog | 否 |
| FolderBrowserDialog | 選擇資料夾 | CommonDialog | 否 |
| FontDialog | 字型設定 | CommonDialog | 是 |
| ColorDialog | 顏色設定 | CommonDialog | 是 |
| PageSetupDialog | 列印頁面設定 | CommonDialog | 否 |
| PrintDialog | 列印設定 | CommonDialog | 否 |
| PrintPreviewDialog | 列印預覽 | Form | 是 |
FileDialog 繼承 CommonDialog,均可透過 ShowDialog() 模式開啟。PrintPreviewDialog 繼承 Form,除模式外亦可 Show() 非模式開啟。