程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#實現Winform間的數據交互的三種方法

C#實現Winform間的數據交互的三種方法

編輯:關於C#

使用.NET編寫winform程序,比較常見的一種情況就是如何實現Form間的數據交互,下面就簡單總結一下常見的幾種數據交互方式:

1、修改子窗體的構造函數:

簡單地說就是通過修改子窗體Form的構造函數,如下所示:

public Frm_Child(string Para1, ArrayList List1, TextBox textBox1, Form. Frm_Main)
{
InitializeComponent();
}

上面的例子中,為子窗體Frm_Child添加了4個參數,分別是:字符串Para1,字符數組List1,文本控件textBox1和父窗體Frm_Main,下面簡單區分一下它們各自的特點:

<1> 字符串:單向的值傳遞,在子窗體中不能通過修改此參數的值來間接改變父窗體中的數據。

<2> 字符數組:引用型傳遞,可以通過將父子窗體中不同的成員變量指向相同的數組,即可實現變更一方,同時更新對方的數據。

<3> 控件:引用型傳遞,可以通過修改該控件的數據來直接達到控制父窗體中該控件數據的目的。

<4> 窗體: 這個最直接,直接將父窗體傳遞到子窗體中,我們可以方便地在子窗體中修改父窗體中所有授權為public 的數據。

2、給窗體添加屬性或方法:

獲取或設置擁有此窗體的窗體。若要使某窗體歸另一個窗體所有,請為其 Owner 屬性分配一個對將成為所有者的 窗體的引用。當一個窗體歸另一窗體所有時,它便隨著所有者窗體最小化和關閉。例如,如果 Frm_Child 歸窗體 Frm_Main所有,則關閉或最小化 Frm_Main 時,也會關閉或最小化 Frm_Child。並且附屬窗體從不顯示在其所有者窗體後面。可以將附屬窗體用於查找和替換窗口之類的窗口,當選定所有者窗體時,這些窗口不應消失。若要確定某父窗體擁有的窗體,請使用OwnedForms屬性。

我們可以通過下面的方式來確定這種從屬的窗體關系:

Frm_Child form. = new Frm_Child();
form.Owner = this;
form.ShowDialog();

或者

Frm_Child form. = new Frm_Child();
form.ShowDialog(this);

定了從屬關系以後,我們就可以通過在Form的load事件中或者通過定義public的屬性或者方法來彼此進行數據修改操作,簡單操作如下:

Frm_Main pareForm. = (Frm_Main)this.Owner;  
this.listData1 = pareForm.ListData2;

3、通過委托的方法:

相對以上兩種方法來說,這種方法可能較復雜一些,但基本思路是一樣的,需要修改的地方如下:

<1> 在Frm_Child.cs中添加委托函數定義:public delegate void SendFun(string str);

<2> 在Frm_Child.cs中添加委托示例:public event SendFun SendToParent;

<3> 在Frm_Child.cs中添加一個按鈕,並添加其事件如下:

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()方法中添加委托實例定義:

this.myForm.Send += new Example3_Frm_Child. SendFun (RecvInfo);

通過上面五步操作,即可達到Form間的通信的目的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved