亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#窗體傳值用法實例詳解

2020-01-24 01:48:17
字體:
來源:轉載
供稿:網友

本文實例講述了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.49028c.com/";   //內部屬性   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.49028c.com/"; 

對于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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久一区二区三区| 亚洲自拍偷拍色片视频| 国产精品亚洲视频在线观看| 国产精品视频免费在线观看| 欧美激情在线视频二区| 亚洲欧美综合精品久久成人| 欧美午夜片欧美片在线观看| 中文字幕精品一区久久久久| 亚洲精品日韩丝袜精品| 欧美肥臀大乳一区二区免费视频| 亚洲人成网站999久久久综合| 日韩国产在线播放| 久久久久久久av| 国产日韩中文字幕在线| 精品小视频在线| 日韩国产欧美区| 国产色婷婷国产综合在线理论片a| 日韩电影免费在线观看中文字幕| 亚洲自拍偷拍色图| 国产亚洲美女精品久久久| 日韩精品在线播放| 欧美日韩午夜激情| 欧美性资源免费| 91精品国产综合久久香蕉922| 51视频国产精品一区二区| 精品一区二区三区三区| 色偷偷av一区二区三区乱| 欧美国产日本高清在线| 国产精品电影在线观看| 亚洲综合在线做性| 欧美大片在线免费观看| 久久精品人人做人人爽| 久久精品小视频| 亚洲jizzjizz日本少妇| 91日本在线观看| 91欧美激情另类亚洲| 亚洲伦理中文字幕| 精品国产鲁一鲁一区二区张丽| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美激情在线视频| 亚洲老司机av| 成人网中文字幕| 精品国产一区二区三区久久狼黑人| 国产精品高精视频免费| 欧美性受xxxx黑人猛交| 色悠悠国产精品| 日韩欧美国产黄色| 国产噜噜噜噜噜久久久久久久久| 性视频1819p久久| 欧美激情欧美狂野欧美精品| 亚洲免费小视频| 成人国产精品久久久| 欧美第一页在线| 2021久久精品国产99国产精品| 亚洲精品久久久久久久久久久久| 久久777国产线看观看精品| 中文字幕久精品免费视频| 亚洲理论电影网| 亚洲欧美国产制服动漫| 欧美多人爱爱视频网站| 久久精品99久久久久久久久| 最近2019免费中文字幕视频三| 国产欧美中文字幕| 人人做人人澡人人爽欧美| 在线观看日韩欧美| 亚洲黄色有码视频| 国产精品白丝av嫩草影院| 亚洲精品中文字幕女同| 97在线视频精品| 日韩av电影手机在线| 中文字幕精品视频| 色777狠狠综合秋免鲁丝| 精品久久久香蕉免费精品视频| 国产亚洲精品高潮| 日本中文字幕不卡免费| 97免费视频在线播放| 欧美成人激情图片网| 亚洲偷欧美偷国内偷| www.久久色.com| 亚洲国产私拍精品国模在线观看| 九九久久久久99精品| 成人www视频在线观看| 国产欧美精品一区二区| 国产日韩av在线| 亚洲精品美女久久久| 91精品视频专区| 久久久久女教师免费一区| 欧美亚洲国产视频| 亚洲的天堂在线中文字幕| 国产精品久久中文| 91日韩在线播放| 成人深夜直播免费观看| 久久综合88中文色鬼| 7m第一福利500精品视频| 亚洲乱码一区二区| 91福利视频在线观看| 亚洲系列中文字幕| 日韩精品极品毛片系列视频| 欧美在线视频免费观看| 国产亚洲福利一区| 午夜精品久久久久久久久久久久久| 国产欧美日韩免费| 久久人人爽人人爽人人片av高请| 成人精品视频在线| 一区二区三区 在线观看视| 亚洲在线一区二区| 热99久久精品| 亚洲精品国偷自产在线99热| 91久久国产精品91久久性色| 伊人久久精品视频| 国产精品色午夜在线观看| 一本色道久久88综合日韩精品| www.日韩不卡电影av| 红桃视频成人在线观看| 亚洲欧美国产一区二区三区| 久久精品电影一区二区| 久久精品视频免费播放| 亚洲精品天天看| 亚洲激情在线视频| 国产极品jizzhd欧美| 国产97在线播放| 国产精品久久久久99| 久久久久久成人精品| 91黑丝高跟在线| 国产91热爆ts人妖在线| 日韩av第一页| 5566日本婷婷色中文字幕97| 伊人久久男人天堂| 欧美日韩精品二区| 国产精品视频999| 久久久久久久色| 欧美一区二区三区……| 97精品国产97久久久久久| www.久久色.com| 亚洲国产精品高清久久久| 亚洲国产精品va在线看黑人动漫| 久久国产精品久久久久久| 97人人爽人人喊人人模波多| 国产精品久在线观看| 日韩一区二区三区国产| 日韩欧美黄色动漫| 欧美在线观看网站| 中文日韩在线视频| 国产精品入口夜色视频大尺度| 欧美黄色片免费观看| 欧美日韩免费一区| 国产精品高清免费在线观看| 久久久久久久久综合| 国产97免费视| 国产精品日韩一区| 97不卡在线视频| 国产亚洲欧美另类中文| 欧美日本高清一区| 亚洲男人天堂2024| 欧美日韩精品在线播放| 91成人在线观看国产| 久久亚洲国产精品| 欧美老女人www| 日韩av电影在线播放| 国产成人av网| 成人信息集中地欧美| 亚洲国产欧美在线成人app| 麻豆精品精华液| 国产欧美在线观看|