最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年06月02日 15:26:48   作者:春哥也編程  
這篇文章主要介紹了c#窗體傳值用法,以實例形式較為詳細(xì)的分析了C#窗體傳值的各種常用技巧,需要的朋友可以參考下

本文實例講述了c#窗體傳值用法。分享給大家供大家參考。具體分析如下:

對于窗體間的數(shù)據(jù)傳遞,是剛開始從事.Net窗體應(yīng)用程序開發(fā)人員碰到的一個常見問題,在此講幾個常見的實現(xiàn)方式。此節(jié)內(nèi)容適用于模式窗體或非模式窗體,部分方式延伸到一般類的操作。

(1)構(gòu)造函數(shù)參數(shù)傳遞

通過構(gòu)造函數(shù)傳遞參數(shù)應(yīng)該是比較基本的參數(shù)傳遞方式,重載構(gòu)造函數(shù),通過帶參數(shù)的構(gòu)造函數(shù)來實例化窗體。

在窗體類內(nèi)部定義參數(shù)變量,

private object myParams;

實現(xiàn)構(gòu)造函數(shù),

public OptionForm(object parameters) 
{ 
  InitializeComponent(); 
  this.myParams = parameters;//設(shè)置參數(shù)引用 
} 

實例化窗體,

OptionForm form = new OptionForm( myParams );

在實際使用過程中,需要注意傳入的是引用類型還是值類型,處理方式會有所不同。

(2)使用窗體的屬性

說起屬性關(guān)聯(lián),上面已經(jīng)提到過Form.Owner屬性,下面筆者根據(jù)MSDN文檔來比較完整的講一下,大部分的文字來自MSDN文檔,為保證其完整性,對其中一些屬性描述進(jìn)行了擴展。

Form.Owner 屬性。獲取或設(shè)置擁有此窗體的窗體。

語法,public Form Owner { get; set; }

若要使某窗體歸另一個窗體所有,可為其 Owner 屬性分配一個對將成為所有者的窗體的引用。當(dāng)一個窗體歸另一窗體所有時,它便隨著所有者窗體最小化和關(guān)閉。例如,如果 Form2 歸窗體 Form1 所有,則關(guān)閉或最小化 Form1 時,F(xiàn)orm2 也會關(guān)閉或最小化。并且附屬窗體從不顯示在其所有者窗體后面??梢詫⒏綄俅绑w用于查找和替換窗口之類的窗口,當(dāng)選定所有者窗體時,這些窗口不應(yīng)消失。

Form.OwnedForms 屬性。獲取 Form 對象的數(shù)組,這些對象表示此窗體擁有的所有窗體。

語法,public Form[] OwnedForms { get; }

此屬性返回包含此窗體擁有的所有窗體的數(shù)組。要使某窗體歸另一個窗體所有,可調(diào)用 AddOwnedForm 方法。分配給所有者窗體的窗體將保持被擁有狀態(tài),直到調(diào)用了 RemoveOwnedForm 方法。如果窗體是多文檔界面 (MDI) 父窗體,則除了當(dāng)前打開的所有 MDI 子窗體外,此屬性將返回所有顯示的窗體。

Form.MdiChildren 屬性。獲取窗體的數(shù)組,這些窗體表示以此窗體作為父級的多文檔界面 (MDI) 子窗體。

語法,public Form[] MdiChildren { get; }

此屬性使您得以獲取對當(dāng)前在某 MDI 父窗體中打開的所有 MDI 子窗體的引用。若要創(chuàng)建 MDI 子窗體,請將要成為 MDI 父窗體的 Form 分配給該子窗體的 MdiParent 屬性??梢允褂么藢傩砸来瓮ㄟ^所有 MDI 子窗體,以執(zhí)行一些操作,如當(dāng) MDI 父窗體關(guān)閉時將數(shù)據(jù)保存到數(shù)據(jù)庫中,或者根據(jù)應(yīng)用程序中執(zhí)行的操作更新子窗體上的字段。

Form.MdiParent 屬性。獲取或設(shè)置此窗體的當(dāng)前多文檔界面 (MDI) 父窗體。

語法,public Form MdiParent { get; set; }

若要創(chuàng)建 MDI 子窗體,請將要成為 MDI 父窗體的 Form 分配給該子窗體的 MdiParent 屬性。可以從某 MDI 子窗體使用此屬性來獲取所有子窗體都需要的全局信息或者調(diào)用對所有子窗體執(zhí)行操作的方法。

Form.ActiveForm 靜態(tài)屬性。獲取此應(yīng)用程序的當(dāng)前活動窗體。

語法,public static Form ActiveForm { get; }

表示當(dāng)前活動窗體,或者如果沒有活動窗體,則為空引用??梢允褂么朔椒ǐ@得對當(dāng)前活動窗體的引用,以在該窗體或其控件上執(zhí)行操作。

Form.ActiveMdiChild 屬性。獲取當(dāng)前活動的多文檔界面 (MDI) 子窗口。

語法,public Form ActiveMdiChild { get; }

返回表示當(dāng)前活動的 MDI 子窗口的 Form,或者如果當(dāng)前沒有子窗口,則返回 空引用。可使用此方法確定 MDI 應(yīng)用程序中是否有任何打開的 MDI 子窗體。也可使用此方法從 MDI 子窗口的 MDI 父窗體或者從應(yīng)用程序中顯示的其他窗體對該 MDI 子窗口執(zhí)行操作。

ContainerControl.ParentForm 屬性。獲取將容器控件分配給的窗體。

語法,public Form ParentForm { get; }

將容器控件分配給的 Form。

(3)使用公共屬性(念時注:我比較常用這種方式)

使用公共屬性也是一種比較常用的方式,通過窗體設(shè)計器添加的控件默認(rèn)訪問修飾符為private級別,可以設(shè)置成public或Internal(在程序集內(nèi)部可見)來對外公開。比如對窗體中的Button進(jìn)行公開,那就可以訪問Button的相關(guān)屬性,同時也可以注冊事件或撤銷事件注冊。如:OptionForm form = new OptionForm();

form.buttonOK.Click += new EventHandler(buttonOK_Click); 
form.ShowDialog(); 

對于只允許讀取訪問或修改訪問的控件或變量可以通過屬性來控制。對(1)方式進(jìn)行修改,去除重載構(gòu)造函數(shù),增加屬性也可以實現(xiàn)同樣的效果。

public object MyParams 
{ 
  get { return this.myParams; } 
  set { this.myParams = value; } 
} 

(4)使用公共方法

使用公共方法類似于屬性,對上面的同等實現(xiàn)如下,

//獲取參數(shù) 
public object GetParams() 
{ 
  return this.myParams; 
} 
//設(shè)置參數(shù) 
public void SetParams(object myParams ) 
{ 
  this.myParams = myParams; 
} 

(5)使用靜態(tài)類該方式可以簡單的理解為靜態(tài)變量全局共享,通過下面代碼能夠比較清楚的理解,先來定義靜態(tài)類,

public static class ParameterSettings 
{ 
  //公共靜態(tài)變量 
  public static string Username = "Zhengzuo"; 
  //私有靜態(tài)變量 
  private static string userRole = "Administrators"; 
  //私有靜態(tài)變量 
  private static string password = "http://m.fzitv.net/"; 
  //內(nèi)部屬性 
  internal static string UserRole 
  { 
    get { return userRole; } 
  } 
  //公共屬性 
  public static string Password 
  { 
    get { return password; } 
    private set { password = value; } 
  } 
} 

在需要訪問的地方通過以下方式進(jìn)行:

string username = ParameterSettings.Username; 
string password = ParameterSettings.Password; 
string userRole = ParameterSettings.UserRole; 
ParameterSettings.Username = "鄭佐";//修改成新用戶名 

(6)窗體實現(xiàn)Singleton模式

Singleton模式是我們開發(fā)過程中最常用的模式之一。在技術(shù)社區(qū)經(jīng)??吹接腥苏劶皩χ鞔绑w實現(xiàn)Singleton,但個人認(rèn)為這不是一種妥當(dāng)?shù)淖龇?,因為沒有這個必要。這里通過另一個自定義類來進(jìn)行演示。假設(shè)UserLoginInfo類用來保存登錄系統(tǒng)后的用戶憑據(jù)。

public class UserLoginInfo 
{ 
  //實現(xiàn)Singleton模式,線程安全。 
  private readonly static UserLoginInfo currentUserInfo = new UserLoginInfo(); 
  //提供全局訪問點 
  public static UserLoginInfo CurrentUserInfo 
  { 
    get { return currentUserInfo; } 
  } 
  //阻止顯式實例化,但不能阻止反射方式調(diào)用。 
  private UserLoginInfo() 
  { 
  } 
  //公共變量 
  public string Username; 
  //私有變量 
  private static string userRole; 
  //私有變量 
  private static string password; 
  //內(nèi)部屬性 
  internal string UserRole 
  { 
    get { return userRole; } 
    set { userRole = value; } 
  } 
  //公共屬性 
  public string Password 
  { 
    get { return password; } 
    internal set { password = value; } 
  } 
} 

在其他代碼中進(jìn)行訪問:

UserLoginInfo.CurrentUserInfo.Username ="鄭佐"; 
UserLoginInfo.CurrentUserInfo.UserRole = "dotnetlover"; 
UserLoginInfo.CurrentUserInfo.Password = "http://m.fzitv.net/"; 

對于Singleton模式的實現(xiàn)方式有很多,編寫時需要考慮是否需要保證實例訪問的線程安全問題,以免引發(fā)不可預(yù)料的情況,為了提高性能可以考慮惰性實例化。

(7)發(fā)布事件進(jìn)行訂閱

通過事件來傳遞參數(shù)應(yīng)該說是一種推的實現(xiàn)方式,在產(chǎn)生事件時進(jìn)行被動的獲取相關(guān)數(shù)據(jù)。這里將通過一個自定義事件來演示數(shù)據(jù)的傳輸。

在自定義事件時,標(biāo)準(zhǔn)的做法都會先定義一個事件參數(shù)類,要么直接使用基類EventArgs,或者從EventArgs繼承實現(xiàn)自己的參數(shù)類,假設(shè)自定義基類取名為OptionSettingEventArgs,

//選項設(shè)置事件參數(shù)類 
public class OptionSettingEventArgs : EventArgs 
{ 
  private string changedPath; 
  //構(gòu)造函數(shù) 
  public OptionSettingEventArgs(string changedPath) 
  { 
    this.changedPath = changedPath; 
  } 
  //讀取參數(shù) 
  public string ChangedPath 
  { 
    get { return this.changedPath; } 
  } 
} 

以上參數(shù)類只包含一個修改后的路徑參數(shù)。接下去我們要對原先的OptionForm窗體增加事件定義,這里使用.net 2.0中提供的泛型類來實現(xiàn)。

//定義事件 
public event EventHandler<OptionSettingEventArgs> OptionSettingChanged; 
編寫事件引發(fā)程序如下, 
//引發(fā)OptionSettingChanged事件 
protected virtual void OnOptionSettingChanged(OptionSettingEventArgs e) 
{ 
  if (OptionSettingChanged != null) 
  { 
    OptionSettingChanged(this, e); 
  } 
} 

對文件目錄選擇按鈕事件處理程序進(jìn)行修改來實現(xiàn)事件激發(fā),并沒有考慮直接從文本框直接數(shù)據(jù)輸入方式。

//通過目錄對話框設(shè)置新的路徑 
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); 
    } 
  } 
} 

好了,一切準(zhǔn)備工作完成,調(diào)用代碼如下,

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#程序設(shè)計有所幫助。

相關(guān)文章

  • 如何用C#創(chuàng)建用戶自定義異常淺析

    如何用C#創(chuàng)建用戶自定義異常淺析

    雖然在 C# 語言中已經(jīng)提供了很多異常處理類,但在實際編程中還是會遇到未涉及的一些異常處理,這篇文章主要給大家介紹了關(guān)于如何用C#創(chuàng)建用戶自定義異常的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 雜談try-catch-finally異常處理

    雜談try-catch-finally異常處理

    這篇文章主要介紹了雜談try-catch-finally異常處理的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • unity avprovideo插件的使用詳解

    unity avprovideo插件的使用詳解

    這篇文章主要介紹了unity avprovideo插件的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#設(shè)計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設(shè)計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設(shè)計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結(jié)合具體實例形式分析了C#使用訪問者模式解決長隆歡樂世界問題的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • C#對稱加密與非對稱加密實例

    C#對稱加密與非對稱加密實例

    這篇文章主要介紹了C#對稱加密與非對稱加密實例,詳細(xì)分析了對稱加密與非對稱加密的原理與具體實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • c#根據(jù)文件類型獲取相關(guān)類型圖標(biāo)的方法代碼

    c#根據(jù)文件類型獲取相關(guān)類型圖標(biāo)的方法代碼

    c#根據(jù)文件類型獲取相關(guān)類型圖標(biāo)的方法代碼,需要的朋友可以參考一下
    2013-05-05
  • C#中使用JSON.NET實現(xiàn)JSON、XML相互轉(zhuǎn)換

    C#中使用JSON.NET實現(xiàn)JSON、XML相互轉(zhuǎn)換

    這篇文章主要介紹了C#中使用JSON.NET實現(xiàn)JSON、XML相互轉(zhuǎn)換的相關(guān)代碼及示例,需要的朋友可以參考下
    2015-11-11
  • 最新評論

    贵南县| 板桥市| 兴化市| 胶南市| 荣成市| 天峨县| 长沙市| 克什克腾旗| 常熟市| 洞口县| 神农架林区| 东光县| 汪清县| 开平市| 连山| 赤壁市| 当涂县| 个旧市| 呼和浩特市| 安义县| 东乌| 浙江省| 阜南县| 建宁县| 天全县| 东辽县| 安达市| 马山县| 台江县| 南宁市| 奉化市| 阿合奇县| 张家口市| 桐城市| 石河子市| 玉林市| 嘉禾县| 巧家县| 冕宁县| 政和县| 朝阳市|