使用.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間的通訊的目的。