作者
適用於
摘要
單擊此處下載本文的示例代碼
內容索引
概述
模式窗體的屬性設置
模式窗體中的按鈕
模式窗體的打開與關閉
窗體的參數傳遞
更多資源
概述
何謂模式窗體?簡單的可以理解為窗體對話框
模式窗體的屬性設置
中一個System
Form
this
Form
this
Form
this
Form
this
Form
this
Form
this
Form
this
Form
this
通過對以上屬性的設置
模式窗體中的按鈕
模式窗體中(比如visual studio
先定義兩個Button
private System
private System
窗體的
this
窗體的
this
可見可以通過快捷鍵來方便的訪問特定按鈕
模式窗體的打開與關閉
談到模式窗體的打開
OptionForm form = new OptionForm();
//form
form
對於指定所有者方式打開的模式窗體可以在模式窗體內部獲取主窗體的引用
//在模式窗體內部訪問所屬窗體
MainForm form = this
注意
談到模式窗體的關閉
DialogResult
DialogResult
DialogResult
DialogResult
DialogResult
DialogResult
DialogResult
DialogResult
由於某些原因在實際用戶操作中比如選項數據無法保存
//注冊窗體關閉事件
this
//注冊確定按鈕事件
this
//注冊取消按鈕事件
this
三個事件對應的事件處理程序如下
//確定按鈕處理程序
private void buttonOK_Click(object sender
{
//假設textBoxPath用來記錄目錄路徑
if (this
{
MessageBox
this
}
else
{
this
}
}
//取消按鈕處理程序
private void buttonCancel_Click(object sender
{
this
}
//窗體關閉處理程序
private void OptionForm_FormClosing(object sender
{
if (this
e
}
上面的代碼都正常
this
this
注冊確定按鈕事件
//注冊確定按鈕事件
this
//確定按鈕處理程序
private void buttonOK_Click(object sender
{
if (this
{
MessageBox
this
//設置文本框焦點
this
}
}
可見
窗體的參數傳遞
對於窗體間的數據傳遞
(
通過構造函數傳遞參數應該是比較基本的參數傳遞方式
在窗體類內部定義參數變量
private object myParams;
實現構造函數
public OptionForm(object parameters)
{
InitializeComponent();
this
}
實例化窗體
OptionForm form = new OptionForm( myParams );
在實際使用過程中
(
說起屬性關聯
Form
語法
若要使某窗體歸另一個窗體所有
Form
語法
此屬性返回包含此窗體擁有的所有窗體的數組
Form
語法
此屬性使您得以獲取對當前在某 MDI 父窗體中打開的所有 MDI 子窗體的引用
Form
語法
若要創建 MDI 子窗體
Form
語法
表示當前活動窗體
Form
語法
返回表示當前活動的 MDI 子窗口的 Form
ContainerControl
語法
將容器控件分配給的 Form
以上屬性MSDN提供相應的代碼事例
(
使用公共屬性也是一種比較常用的方式
OptionForm form = new OptionForm();
form
form
對於只允許讀取訪問或修改訪問的控件或變量可以通過屬性來控制
public object MyParams
{
get { return this
set { this
}
(
使用公共方法類似於屬性
//獲取參數
public object GetParams()
{
return this
}
//設置參數
public void SetParams(object myParams )
{
this
}
(
public static class ParameterSettings
{
//公共靜態變量
public static string Username =
//私有靜態變量
private static string userRole =
//私有靜態變量
private static string password =
//內部屬性
internal static string UserRole
{
get { return userRole; }
}
//公共屬性
public static string Password
{
get { return password; }
private set { password = value; }
}
}
在需要訪問的地方通過以下方式進行
string username = ParameterSettings
string password = ParameterSettings
string userRole = ParameterSettings
ParameterSettings
(
Singleton模式是我們開發過程中最常用的模式之一
/*==============================================
程序 鄭佐
==============================================*/
public class UserLoginInfo
{
//實現Singleton模式
private readonly static UserLoginInfo currentUserInfo = new UserLoginInfo();
//提供全局訪問點
public static UserLoginInfo CurrentUserInfo
{
get { return currentUserInfo; }
}
//阻止顯式實例化
private UserLoginInfo()
{
}
//公共變量
public string Username;
//私有變量
private static string userRole;
//私有變量
private static string password;
//內部屬性
internal string UserRole
{
get { return userRole; }
set { userRole = value; }
}
//公共屬性
public string Password
{
get { return password; }
internal set { password = value; }
}
}
在其他代碼中進行訪問
UserLoginInfo
UserLoginInfo
UserLoginInfo
對於Singleton模式的實現方式有很多
(
通過事件來傳遞參數應該說是一種推的實現方式
在自定義事件時
//選項設置事件參數類
public class OptionSettingEventArgs : EventArgs
{
private string changedPath;
//構造函數
public OptionSettingEventArgs(string changedPath)
{
this
}
//讀取參數
public string ChangedPath
{
get { return this
}
}
以上參數類只包含一個修改後的路徑參數
//定義事件
public event EventHandler<OptionSettingEventArgs>
編寫事件引發程序如下
//引發OptionSettingChanged事件
protected virtual void OnOptionSettingChanged(OptionSettingEventArgs e)
{
if (OptionSettingChanged != null)
{
OptionSettingChanged(this
}
}
對文件目錄選擇按鈕事件處理程序進行修改來實現事件激發
//通過目錄對話框設置新的路徑
private void buttonBrowser_Click(object sender
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
DialogResult result = dialog
if (result == DialogResult
{
if(this
{
this
OptionSettingEventArgs args = new OptionSettingEventArgs(dialog
OnOptionSettingChanged(args);
}
}
}
好了
OptionForm form = new OptionForm();
//注冊事件
form
form
通過以下事件處理程序來驗證其正確性
private void form_OptionSettingChanged(object sender
{
string newPath = e
MessageBox
}
在實際開發過程中
MessageBox。顯示可包含文本、按鈕和符號(通知並指示用戶)的消息框。通過MessageBox.Show 靜態方法來打開模式對話框。
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 ) ;
根據不同的參數可以定制對話框的行為。
另外一些對話框提供了特定功能。
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);方法以模式方式打開窗體。
更多資源
對於windowsforms的開發,這裡推介幾本大師寫的書,
Charles Petzold著的《Programming Windows with C# (Core Reference)》,中文翻譯版為《Microsoft c#Windows程序設計(上下冊)》。
Chris Sells著的《Windows Forms Programming in C#》,中文翻譯版為《Windows Forms程序設計》。在上看到該書好像已經出第二版了。
From:http://tw.wingwit.com/Article/program/net/201311/11487.html