转:c#委托事件实现窗体传值通信
C#實(shí)現(xiàn)Winform窗口間數(shù)據(jù)交互的三種方法介紹
2010-03-15? 來(lái)自:CNBLOG? 字體大小:【大?中?小】- 摘要:本文分別介紹C#實(shí)現(xiàn)Winform窗口間數(shù)據(jù)交互的三種方法:修改子窗體的構(gòu)造函數(shù)、給窗體添加屬性或方法、通過(guò)委托的方法,并提供簡(jiǎn)單的示例代碼供參考。
簡(jiǎn)單地說(shuō)就是通過(guò)修改子窗體Form的構(gòu)造函數(shù),如下所示:
public Frm_Child(string Para1, ArrayList List1, TextBox textBox1, Form. Frm_Main){
InitializeComponent();
} 上面的例子中,為子窗體Frm_Child添加了4個(gè)參數(shù),分別是:字符串Para1,字符數(shù)組List1,文本控件textBox1和父窗體Frm_Main,下面簡(jiǎn)單區(qū)分一下它們各自的特點(diǎn):
<1> 字符串:單向的值傳遞,在子窗體中不能通過(guò)修改此參數(shù)的值來(lái)間接改變父窗體中的數(shù)據(jù)。
<2> 字符數(shù)組:引用型傳遞,可以通過(guò)將父子窗體中不同的成員變量指向相同的數(shù)組,即可實(shí)現(xiàn)變更一方,同時(shí)更新對(duì)方的數(shù)據(jù)。
<3> 控件:引用型傳遞,可以通過(guò)修改該控件的數(shù)據(jù)來(lái)直接達(dá)到控制父窗體中該控件數(shù)據(jù)的目的。
<4> 窗體: 這個(gè)最直接,直接將父窗體傳遞到子窗體中,我們可以方便地在子窗體中修改父窗體中所有授權(quán)為public 的數(shù)據(jù)。
2、給窗體添加屬性或方法:
獲取或設(shè)置擁有此窗體的窗體。若要使某窗體歸另一個(gè)窗體所有,請(qǐng)為其 Owner 屬性分配一個(gè)對(duì)將成為所有者的 窗體的引用。當(dāng)一個(gè)窗體歸另一窗體所有時(shí),它便隨著所有者窗體最小化和關(guān)閉。例如,如果 Frm_Child 歸窗體 Frm_Main所有,則關(guān)閉或最小化 Frm_Main 時(shí),也會(huì)關(guān)閉或最小化 Frm_Child。并且附屬窗體從不顯示在其所有者窗體后面。可以將附屬窗體用于查找和替換窗口之類的窗口,當(dāng)選定所有者窗體時(shí),這些窗口不應(yīng)消失。若要確定某父窗體擁有的窗體,請(qǐng)使用OwnedForms屬性。
我們可以通過(guò)下面的方式來(lái)確定這種從屬的窗體關(guān)系:
Frm_Child form. = new Frm_Child();form.Owner = this;
form.ShowDialog(); 或者 Frm_Child form. = new Frm_Child();
form.ShowDialog(this); 定了從屬關(guān)系以后,我們就可以通過(guò)在Form的load事件中或者通過(guò)定義public的屬性或者方法來(lái)彼此進(jìn)行數(shù)據(jù)修改操作,簡(jiǎn)單操作如下: Frm_Main pareForm. = (Frm_Main)this.Owner;
this.listData1 = pareForm.ListData2;
3、通過(guò)委托的方法:
相對(duì)以上兩種方法來(lái)說(shuō),這種方法可能較復(fù)雜一些,但基本思路是一樣的,需要修改的地方如下:
<1> 在Frm_Child.cs中添加委托函數(shù)定義:public delegate void SendFun(string str);
<2> 在Frm_Child.cs中添加委托示例:public event SendFun SendToParent;
<3> 在Frm_Child.cs中添加一個(gè)按鈕,并添加其事件如下:
private void button1_Click(object sender, EventArgs e){
if (Send != null)
{
Send(this.textBox1.Text);
}
} <4> 在Frm_Main.cs中添加方法RecvInfo()方法如下: private void RecvInfo (string str)
{
textBox1.Text = str;
} <5> 在Frm_Main.Designer.cs中的InitializeComponent()方法中添加委托實(shí)例定義: this.myForm.Send += new Example3_Frm_Child. SendFun (RecvInfo);
通過(guò)上面五步操作,即可達(dá)到Form間的通信的目的。
?
??? 以上介紹的就是C#實(shí)現(xiàn)Winform窗口間數(shù)據(jù)交互的三種方法,希望對(duì)你了解C#實(shí)現(xiàn)Winform窗口間數(shù)據(jù)交互有所幫助。
轉(zhuǎn)載于:https://www.cnblogs.com/bantongshui/p/3196422.html
總結(jié)
以上是生活随笔為你收集整理的转:c#委托事件实现窗体传值通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 和吴昊一起玩推理 Round 2 ——
- 下一篇: 神逸之作:国产快速启动软件神品ALTRu