使用.NET编写winform程序,比较常见的一种情况就是如何实现Form间的数据交互,下面就简单总结一下常见的几种数据交互方式:
(1)修改子窗体的构造函数:简单地说就是通过修改子窗体Form的构造函数,如下所示: public Form2(string Para1, ArrayList List1, TextBox textBox1, Form Form1) { InitializeComponent(); } 上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Form1,下面简单区分一下它们各自的特点: <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。 <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。 <3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。 <4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public的数据。
(2)给窗体添加属性或方法: 获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体, 请使用OwnedForms属性。 我们可以通过下面的方式来确定这种从属的窗体关系: Form2 form = new Form2(); form.Owner = this; form.ShowDialog(); 或者 Form2 form = new Form2(); form.ShowDialog(this); 定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下: Form1 pareForm = (Form1)this.Owner; this.listData1 = pareForm.ListData2;
(3)通过委托的方法: 相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下: <1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str); <2> 在Form2.cs中添加委托示例:public event SendFun SendToParent; <3> 在Form2.cs中添加一个按钮,并添加其事件如下: private void button1_Click(object sender, EventArgs e) { if (Send != null) { Send(this.textBox1.Text); } } <4> 在Form1.cs中添加方法RecvInfo()方法如下: private void RecvInfo (string str) { textBox1.Text = str; } <5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义: this.myForm.Send += new Example3_Form2. SendFun (RecvInfo); 通过上面五步操作,即可达到Form间的通信的目的。