WinForm窗体间传值的方法

2019-12-26 12:01:28王振洲

例子:
Form1:

复制代码 private void button1_Click(object sender, EventArgs e)
{
new Form2("来自Form1").Show();
}
Form2:
复制代码 public Form2(string value)
{
InitializeComponent();
MessageBox.Show(vaue);
}
此种窗体间传值方法明显优与第一种的传值参数,也不会出现串数据现象,但是需要注意修改Form2的构造函数,每个窗体的默认构造函数默认都是无参数的,因此需要去修改构造函数。
 
八、通过构造函数

 

特点:传值是单向的(不可以互相传值),实现简单
 
实现代码如下:
在窗体Form2中

复制代码 int value1;
string value2;
public Form2 ( int value1 , string value2 )
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
在窗体Form1中这样调用
复制代码 new Form2 ( 111 , "222" ).Show ( ); //这样就把111,"222",这2个值传送给了Form2
 
九、用委托来实现。

 

委托可以把一个方法作为参数带入另一个方法,在窗体传值中,子窗体需要执行一个方法来改变父窗体的值,
而这个方法,则可以用委托从父窗体传递过来。在父窗体中,声明修改文本框的方法AfterChildChange,在new一个子窗体的时候,将这个方法传递给子窗体。那么当子窗体点击同步按钮时,会执行父窗体的AfterChildChange方法,已达到修改文本框值的目的。
 
例子
1、在子窗体中设置一个委托类型的属性:

复制代码 public Action<string> AfterChangeTextDel { get; set; }
2、在子窗体同步按钮中:
复制代码 if (AfterChangeTextDel != null)
{
AfterChangeTextDel(this.textBox1.Text);//执行委托
}
3、在父窗体中添加方法:
复制代码 public void AfterChildChange(string text)
{
txtName.Text = text;
}
4、在父窗体启动子窗体按钮:
复制代码 ChildFrm frm =new ChildFrm();
frm.AfterChangeTextDel = new Action<string>(this.AfterChildChange);
frm.Show();
5、这样也能实现窗体传值,子窗体的委托可以在父窗体 其他地方可以进行直接执行。:解决此问题。微软引入了事件。
 
十、用事件来实现