c#窗體傳值用法實例詳解。本站提示廣大學習愛好者:(c#窗體傳值用法實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是c#窗體傳值用法實例詳解正文
本文實例講述了c#窗體傳值用法。分享給年夜家供年夜家參考。詳細剖析以下:
關於窗體間的數據傳遞,是剛開端從事.Net窗體運用法式開辟人員碰著的一個罕見成績,在此講幾個罕見的完成方法。此節內容實用於形式窗體或非形式窗體,部門方法延長到普通類的操作。
(1)結構函數參數傳遞
經由過程結構函數傳遞參數應當是比擬根本的參數傳遞方法,重載結構函數,經由過程帶參數的結構函數來實例化窗體。
在窗體類外部界說參數變量,
private object myParams;
完成結構函數,
public OptionForm(object parameters) { InitializeComponent(); this.myParams = parameters;//設置參數援用 }
實例化窗體,
OptionForm form = new OptionForm( myParams );
在現實應用進程中,須要留意傳入的是援用類型照樣值類型,處置方法會有所分歧。
(2)應用窗體的屬性
說起屬性聯系關系,下面曾經提到過Form.Owner屬性,上面筆者依據MSDN文檔來比擬完全的講一下,年夜部門的文字來自MSDN文檔,為包管其完全性,對個中一些屬性描寫停止了擴大。
Form.Owner 屬性。獲得或設置具有此窗體的窗體。
語法,public Form Owner { get; set; }
若要使某窗體歸另外一個窗體一切,可為其 Owner 屬性分派一個對將成為一切者的窗體的援用。當一個窗體歸另外一窗體一切時,它便跟著一切者窗體最小化和封閉。例如,假如 Form2 歸窗體 Form1 一切,則封閉或最小化 Form1 時,Form2 也會封閉或最小化。而且從屬窗體從不顯示在其一切者窗體前面。可以將從屬窗體用於查找和調換窗口之類的窗口,被選定一切者窗體時,這些窗口不該消逝。
Form.OwnedForms 屬性。獲得 Form 對象的數組,這些對象表現此窗體具有的一切窗體。
語法,public Form[] OwnedForms { get; }
此屬性前往包括此窗體具有的一切窗體的數組。要使某窗體歸另外一個窗體一切,可挪用 AddOwnedForm 辦法。分派給一切者窗體的窗體將堅持被具有狀況,直到挪用了 RemoveOwnedForm 辦法。假如窗體是多文檔界面 (MDI) 父窗體,則除以後翻開的一切 MDI 子窗體外,此屬性將前往一切顯示的窗體。
Form.MdiChildren 屬性。獲得窗體的數組,這些窗體表現以此窗體作為父級的多文檔界面 (MDI) 子窗體。
語法,public Form[] MdiChildren { get; }
此屬性使您得以獲得對以後在某 MDI 父窗體中翻開的一切 MDI 子窗體的援用。若要創立 MDI 子窗體,請將要成為 MDI 父窗體的 Form 分派給該子窗體的 MdiParent 屬性。可使用此屬性順次經由過程一切 MDI 子窗體,以履行一些操作,如當 MDI 父窗體封閉時將數據保留到數據庫中,或許依據運用法式中履行的操作更新子窗體上的字段。
Form.MdiParent 屬性。獲得或設置此窗體確當前多文檔界面 (MDI) 父窗體。
語法,public Form MdiParent { get; set; }
若要創立 MDI 子窗體,請將要成為 MDI 父窗體的 Form 分派給該子窗體的 MdiParent 屬性。可以從某 MDI 子窗體應用此屬性來獲得一切子窗體都須要的全局信息或許挪用對一切子窗體履行操作的辦法。
Form.ActiveForm 靜態屬性。獲得此運用法式確當前運動窗體。
語法,public static Form ActiveForm { get; }
表現以後運動窗體,或許假如沒有運動窗體,則為空援用。可使用此辦法取得對以後運動窗體的援用,以在該窗體或其控件上履行操作。
Form.ActiveMdiChild 屬性。獲得以後運動的多文檔界面 (MDI) 子窗口。
語法,public Form ActiveMdiChild { get; }
前往表現以後運動的 MDI 子窗口的 Form,或許假如以後沒有子窗口,則前往 空援用。可以使用此辦法肯定 MDI 運用法式中能否有任何翻開的 MDI 子窗體。也可以使用此辦法從 MDI 子窗口的 MDI 父窗體或許從運用法式中顯示的其他窗體對該 MDI 子窗口履行操作。
ContainerControl.ParentForm 屬性。獲得將容器控件分派給的窗體。
語法,public Form ParentForm { get; }
將容器控件分派給的 Form。
(3)應用公共屬性(念時注:我比擬經常使用這類方法)
應用公共屬性也是一種比擬經常使用的方法,經由過程窗體設計器添加的控件默許拜訪潤飾符為private級別,可以設置成public或Internal(在法式集外部可見)來對外地下。好比對窗體中的Button停止地下,那便可以拜訪Button的相干屬性,同時也能夠注冊事宜或撤消事宜注冊。如:OptionForm form = new OptionForm();
form.buttonOK.Click += new EventHandler(buttonOK_Click); form.ShowDialog();
關於只許可讀取拜訪或修正拜訪的控件或變量可以經由過程屬性來掌握。對(1)方法停止修正,去除重載結構函數,增長屬性也能夠完成異樣的後果。
public object MyParams { get { return this.myParams; } set { this.myParams = value; } }
(4)應用公共辦法
應用公共辦法相似於屬性,對下面的一致完成以下,
//獲得參數 public object GetParams() { return this.myParams; } //設置參數 public void SetParams(object myParams ) { this.myParams = myParams; }
(5)應用靜態類該方法可以簡略的懂得為靜態變量全局同享,經由過程上面代碼可以或許比擬清晰的懂得,先來界說靜態類,
public static class ParameterSettings { //公共靜態變量 public static string Username = "Zhengzuo"; //公有靜態變量 private static string userRole = "Administrators"; //公有靜態變量 private static string password = "http://www.jb51.net/"; //外部屬性 internal static string UserRole { get { return userRole; } } //公共屬性 public static string Password { get { return password; } private set { password = value; } } }
在須要拜訪的處所經由過程以下方法停止:
string username = ParameterSettings.Username; string password = ParameterSettings.Password; string userRole = ParameterSettings.UserRole; ParameterSettings.Username = "鄭佐";//修正成新用戶名
(6)窗體完成Singleton形式
Singleton形式是我們開辟進程中最經常使用的形式之一。在技巧社區常常看到有人談及對主窗體完成Singleton,但小我以為這不是一種妥善的做法,由於沒有這個需要。這裡經由過程另外一個自界說類來停止演示。假定UserLoginInfo類用來保留登錄體系後的用戶憑證。
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.CurrentUserInfo.Username ="鄭佐"; UserLoginInfo.CurrentUserInfo.UserRole = "dotnetlover"; UserLoginInfo.CurrentUserInfo.Password = "http://www.jb51.net/";
關於Singleton形式的完成方法有許多,編寫時須要斟酌能否須要包管實例拜訪的線程平安成績,以避免激發弗成預感的情形,為了進步機能可以斟酌惰性實例化。
(7)宣布事宜停止定閱
經由過程事宜來傳遞參數應當說是一種推的完成方法,在發生事宜時停止主動的獲得相干數據。這裡將經由過程一個自界說事宜來演示數據的傳輸。
在自界說事宜時,尺度的做法都邑先界說一個事宜參數類,要末直接應用基類EventArgs,或許從EventArgs繼續完成本身的參數類,假定自界說基類取名為OptionSettingEventArgs,
//選項設置事宜參數類 public class OptionSettingEventArgs : EventArgs { private string changedPath; //結構函數 public OptionSettingEventArgs(string changedPath) { this.changedPath = changedPath; } //讀取參數 public string ChangedPath { get { return this.changedPath; } } }
以上參數類只包括一個修正後的途徑參數。接下去我們要對本來的OptionForm窗體增長事宜界說,這裡應用.net 2.0中供給的泛型類來完成。
//界說事宜 public event EventHandler<OptionSettingEventArgs> OptionSettingChanged; 編寫事宜激發法式以下, //激發OptionSettingChanged事宜 protected virtual void OnOptionSettingChanged(OptionSettingEventArgs e) { if (OptionSettingChanged != null) { OptionSettingChanged(this, e); } }
對文件目次選擇按鈕事宜處置法式停止修正來完成事宜激起,並沒有斟酌直接從文本框直接數據輸出方法。
//經由過程目次對話框設置新的途徑 private void buttonBrowser_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); DialogResult result = dialog.ShowDialog(this); if (result == DialogResult.OK) { if(this.textBoxPath.Text != dialog.SelectedPath) { this.textBoxPath.Text = dialog.SelectedPath; OptionSettingEventArgs args = new OptionSettingEventArgs(dialog.SelectedPath); OnOptionSettingChanged(args); } } }
好了,一切預備任務完成,挪用代碼以下,
OptionForm form = new OptionForm(); //注冊事宜 form.OptionSettingChanged += new EventHandler (form_OptionSettingChanged); form.ShowDialog();
經由過程以下事宜處置法式來驗證其准確性,
private void form_OptionSettingChanged(object sender, OptionSettingEventArgs e) { string newPath = e.ChangedPath; MessageBox.Show(this, String.Format("新途徑為“{0}”。", newPath), "提醒"); }
願望本文所述對年夜家的C#法式設計有所贊助。