C#模式窗體操作詳解
C#模式窗體的打開與關閉是如何實現(xiàn)的呢,讓我們先來看看C#模式窗體的打開,一般通過Form.ShowDialog ()方法或她的一個重載Form.ShowDialog (IWin32Window)來實現(xiàn),其中后一個方法將窗體顯示為具有指定所有者的模式對話框。
C#模式窗體打開的操作:
- OptionForm form = new OptionForm();
- //form.ShowDialog();
- form.ShowDialog(this);
對于指定所有者方式打開的模式窗體可以在模式窗體內部獲取主窗體的引用,
- //在模式窗體內部訪問所屬窗體
- MainForm form = this.Owner as MainForm;
注意,如果以Form.ShowDialog ()方式打開,那Form.Owner屬性會是空引用。
C#模式窗體的關閉
先來看一下模式窗體關閉后的返回值。無論是調用Form.ShowDialog ()方法還是Form.ShowDialog (IWin32Window)方法,都會在模式窗體關閉時返回System.Windows.Forms.DialogResult枚舉值。參考 MSDN,該枚舉包含的值如下,
DialogResult.Abort,對話框的返回值是 Abort(通常從標簽為“中止”的按鈕發(fā)送)。
DialogResult.Cancel,對話框的返回值是 Cancel(通常從標簽為“取消”的按鈕發(fā)送)。
DialogResult.Ignore,對話框的返回值是 Ignore(通常從標簽為“忽略”的按鈕發(fā)送)。
DialogResult.No,對話框的返回值是 No(通常從標簽為“否”的按鈕發(fā)送)。
DialogResult.None,從對話框返回了 Nothing。這表明有模式對話框繼續(xù)運行。
DialogResult.OK,對話框的返回值是 OK(通常從標簽為“確定”的按鈕發(fā)送)。
DialogResult.Retry,對話框的返回值是 Retry(通常從標簽為“重試”的按鈕發(fā)送)。
DialogResult.Yes,對話框的返回值是 Yes(通常從標簽為“是”的按鈕發(fā)送)。
由于某些原因在實際用戶操作中比如選項數(shù)據(jù)無法保存,輸入的設置數(shù)據(jù)有問題,點擊[確定]按鈕需要阻止窗體的關閉以
對輸入的設置進行調整。對于一些開發(fā)者在技術社區(qū)貼的阻止模式窗體關閉的代碼,我認為不是很好的實現(xiàn)。以下用代碼來描述該實現(xiàn),注意其中用到了三個事件。
- //注冊窗體關閉事件
- this.FormClosing +=
- new System.Windows.Forms.
- FormClosingEventHandler(
- this.OptionForm_FormClosing);
- //注冊確定按鈕事件
- this.buttonOK.Click +=
- new System.EventHandler(
- this.buttonOK_Click);
- //注冊取消按鈕事件
- this.buttonCancel.Click +=
- new System.EventHandler(
- this.buttonCancel_Click);
- //三個事件對應的事件處理程序如下,
- //確定按鈕處理程序
- private void buttonOK_Click(
- object sender, EventArgs e)
- {
- //假設textBoxPath用來記錄目錄路徑,如果不存在要求用戶重新設置。
- if (this.textBoxPath.Text.Trim().Length == 0)
- {
- MessageBox.Show("輸入路徑信息不對!");
- this.textBoxPath.Focus();
- }
- else
- {
- this.DialogResult = DialogResult.OK;
- }
- }
- //取消按鈕處理程序
- private void buttonCancel_Click(
- object sender, EventArgs e)
- {
- this.DialogResult = DialogResult.Cancel;
- }
- //窗體關閉處理程序,在關閉窗體時發(fā)生。
- private void OptionForm_FormClosing(
- object sender, FormClosingEventArgs e)
- {
- if (this.DialogResult != DialogResult.Cancel &&
- this.DialogResult != DialogResult.OK)
- e.Cancel = true;
- }
上面的關于C#模式窗體關閉的代碼都正常,就是事件寫多了,對上面代碼進行修改,去掉[取消]按鈕事件和窗體關閉事件以及相關的事件處理程序。首先需要在窗體構造函數(shù)中通過設置按鈕的DialogResult屬性來實現(xiàn)返回特定的DialogResult。
- this.buttonOK.DialogResult =
- System.Windows.Forms.DialogResult.OK;
- this.buttonCancel.DialogResult =
- System.Windows.Forms.DialogResult.Cancel;
- //注冊確定按鈕事件
- this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
- //確定按鈕處理程序
- private void buttonOK_Click(object sender, EventArgs e)
- {
- if (this.textBoxPath.Text.Trim().Length == 0)
- {
- MessageBox.Show("輸入的路徑信息不對!");
- this.textBoxPath.Focus();
- //設置文本框焦點
- this.DialogResult = DialogResult.None;
- }
- }
可見,新的實現(xiàn)方式代碼減少了一半。
.Net Framework提供的C#模式窗體
.net Framework為我們提供了一些比較常用的對話框,在開發(fā)過程中省了不少事,以下對其進行介紹。
MessageBox。顯示可包含文本、按鈕和符號(通知并指示用戶)的消息框。通過MessageBox.Show 靜態(tài)方法來打開模式對話框。
- public static DialogResult Show ( string text );
該方法包含多個重載版本。復雜的一個方法如下,
- public static DialogResult Show (
- IWin32Window owner,
- string text,
- string caption,
- MessageBoxButtons buttons,
- MessageBoxIcon icon,
- MessageBoxDefaultButton defaultButton,
- MessageBoxOptions options,
- string helpFilePath,
- HelpNavigator navigator,
- Object param ) ;
根據(jù)不同的參數(shù)可以定制對話框的行為。
C#模式窗體的另外一些對話框提供了特定功能。
OpenFileDialog。打開文件對話框,從FileDialog類繼承,提示用戶打開文件,無法繼承此類。對于文件的打開操作屬于比較常見的。
SaveFileDialog。保存文件對話框,從FileDialog類繼承,提示用戶選擇文件的保存位置。無法繼承此類。
FolderBrowserDialog。目錄瀏覽對話框,從CommonDialog類繼承,提示用戶選擇文件夾。無法繼承此類。 FontDialog。字體設置對話框,從CommonDialog類繼承,提示用戶從本地計算機上安裝的字體中選擇一種字體??衫^承該類。
ColorDialog。顏色設置對話框,從CommonDialog類繼承,表示一個通用對話框,該對話框顯示可用的顏色以及允許用戶定義自定義顏色的控件??衫^承該類。
PageSetupDialog。打印頁面設置對話框,從CommonDialog類繼承,允許用戶更改與頁面相關的打印設置,包括邊距和紙張方向。無法繼承此類。
PrintDialog。打印對話框,從CommonDialog類繼承,允許用戶選擇一臺打印機并選擇文檔中要打印的部分。無法繼承此類。
PrintPreviewDialog。打印預覽對話框,從Form類繼承,表示包含 PrintPreviewControl 的對話框窗體??衫^承該類。由于該類從Form類繼承,所以除了通過
- PrintPreviewDialog.ShowDialog ();
- PrintPreviewDialog.ShowDialog (IWin32Window);
方法以模式方式打開窗體外,還可以通過PrintPreviewDialog.Show ();
或其重載PrintPreviewDialog.Show (IWin32Window);方法按正常非模式方式打開。
上面列舉的文件對話框抽象基類FileDialog是從CommonDialog抽象類繼承,因此所有從該類繼承的對話框都可以通過CommonDialog.ShowDialog ();或其重載CommonDialog.ShowDialog (IWin32Window);方法以模式方式打開窗體。
C#模式窗體的打開與關閉以及相關的一些操作的介紹就講解到這里,希望對你了解和學習C#模式窗體有所幫助。


2009-09-07 04:59:12
2009-09-07 06:48:13
2009-09-07 06:07:46
2009-09-07 04:56:52
2009-08-20 11:01:51
2009-08-18 17:05:08
2009-09-01 11:21:02
2009-09-07 06:31:32
2009-08-28 15:58:54
2009-09-07 04:19:56




