委託之winForm視窗間傳遞資料

來源:互聯網
上載者:User
文章目錄
  • 評論

在winForm應用程式中,視窗間資料的傳遞是最多的應用之一,尤其是在管理軟體當中。

視窗的資料傳遞,有多種方式,在這篇隨筆中主要是闡述一下利用委託如何來傳遞資料。

在本執行個體程式中,有兩個表單:一個主表單FrmMain,接收資料;一個子表單FrmChild,傳出資料,UI如下:

   

在主表單中,[設定]按鈕,彈出子表單,在文字框中輸入相應的值後,點擊[確認]返回到主表單,同時返回資料至主表單。

具體代碼實現如下:

一、定義事件類別:
public class PassDataWinFormEventArgs : EventArgs
{

public PassDataWinFormEventArgs()
{
//
}
public PassDataWinFormEventArgs(string refName, string refPlace, int refAge)
{
this._name = refName;
this._place = refPlace;
this._age = refAge;
}

private string _name;
private string _place;
private int _age;

public string Name
{
get { return _name; }
set { _name = value; }
}
public string Place
{
get { return _place; }
set { _place = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
}

通過PassDataWinFormEventArgs的執行個體,傳遞資料。
二、在子表單中設計如下代碼:
//添加一個委託
public delegate void PassDataBetweenFormHandler(object sender, PassDataWinFormEventArgs e);
//添加一個PassDataBetweenFormHandler類型的事件
public event PassDataBetweenFormHandler PassDataBetweenForm;
書寫子表單確認按鈕的代碼如下:
private void bbtOK_Click(object sender, EventArgs e)
{
string name,place;
int age;

name = txtName.Text;
place = txtPlace.Text;

Int32.TryParse(txtAge.Text, out age);

PassDataWinFormEventArgs args = new PassDataWinFormEventArgs(name, place, age);

PassDataBetweenForm(this, args);

this.Dispose();
}

三、設計主表單代碼:

主表單中[設定]按鈕的代碼如下:

private void bbtSetup_Click(object sender, EventArgs e)
{
FrmChild frmChild = new FrmChild();
frmChild.PassDataBetweenForm += new FrmChild.PassDataBetweenFormHandler(FrmChild_PassDataBetweenForm);
frmChild.Show();
frmChild.Activate();
}

主要用來開啟子表單,綁定事件。

在FrmChild_PassDataBetweenForm()方法中接收PassDataWinFormEventArgs執行個體傳遞迴來的資料,故此FrmChild_PassDataBetweenForm()代碼如下:

private void FrmChild_PassDataBetweenForm(object sender,PassDataWinFormEventArgs e)
{
this.txtName.Text = e.Name;
this.txtPlace.Text = e.Place;
this.txtAge.Text = e.Age.ToString();
}
四、後記:
利用委託進行資料傳遞,有一個很大的優點就是,可以在任何表單中調用子表單,而不用修改子表單內部的設計,從而達到高度複用子表單。
 
0 0

0

(請您對文章做出評價)« 上一篇:委託之非同步
» 下一篇:Javascript擷取CheckBoxList的value

posted on 2009-10-24 23:19 inforasc 閱讀(345) 評論(9)  編輯 收藏 網摘 所屬分類: C#基礎知識

評論

1740010

#1樓 2009-10-25 22:05 WinForm初學者[未註冊使用者] 在子表單中頂一個public 的 PassDataWinFormEventArgs,主表單直接擷取,這種方式有什麼缺點呐?
  回複  引用    

#2樓 2009-10-25 22:17 netKing       調試走到這一步時,報錯
PassDataBetweenForm(this, args);
錯誤是:未將對象引用設定到對象的執行個體。
  回複  引用  查看    

#3樓 2009-10-26 09:31 邢少       什麼意思?..你是要說明委託的一種應用方式嗎?還是要說委託可以用來傳遞參數。
還是說它是一個回呼函數。
  回複  引用  查看    

#4樓[樓主] 2009-10-26 20:33 inforasc       @邢少
應該是 委託的一種應用吧!

在winform之間傳遞資料的時候,曾經嘗試過其他方法,比如用Owner屬性,總是感覺耦合性較高!
  回複  引用  查看    

#5樓[樓主] 2009-10-26 20:36 inforasc       @netKing

代碼應該是沒問題的,我是從Vs.Net源碼裡面直接黏貼出來的。

可以告訴我具體是哪一個 對象未 執行個體化 嗎?


  回複  引用  查看    

#6樓 2009-10-27 08:39 邢少       @inforasc
嗯。推薦。記得以前有一次 有人問了我一個問題。問:有a介面,介面上有一個按鈕,彈出b頁面,實現b控制a頁面的圖片變化?有幾種方式?最少3種
  回複  引用  查看    

#7樓 2009-10-27 23:35 ibate86       謝謝樓主,雖然不知道是不是新的思路,但卻是第一次聽說。多謝~
  回複  引用  查看    

#8樓[樓主] 2009-10-28 01:37 inforasc       @ibate86
不是新思路,是實際項目中使用的,而且在一些技術文章上也看到過,好像在CodeProject上
  回複  引用  查看    

#9樓 2010-01-04 13:43 StephenJu      

view source

print?

01 private void bbtOK_Click(object sender, EventArgs e)
02 {    string name,place;    
03 int age;    
04 name = txtName.Text;    
05 place = txtPlace.Text;    
06 Int32.TryParse(txtAge.Text, out age);  
07 if(PassDataBetweenForm != null)
08 {
09   PassDataWinFormEventArgs args = new   PassDataWinFormEventArgs(name, place, age);    PassDataBetweenForm(this, args);   
10  this.Dispose();
11 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.