windows form之间传值
在windows form之间传值,大概有四个方法:全局变量、属性、窗体构造函数和delegate。本文以form1和form2之间传值为例。
1.全局变量
在form1中定义一个public static类型的变量s,在form2中直接以form1.s的形式引用即可。
2.属性
通过公用一个class来实现,此处以Person类为例,此类只包括age属性,代码如下:
public class Person
{
public int age=0;
public void changeAge(int _age)
{
this.age=_age;
}
}
Form1
public partial class Form1 : Form
{
private Person person;
public Form1()
{
InitializeComponent();
person = new Person();
Form2 form2 = new Form2();
form2.person = this.person;
form2.Show();
}
//change age
private void btnChange_Click(object sender, EventArgs e)
{
person.age = 1;
}
//get age
private void btnGet_Click(object sender, EventArgs e)
{
this.textBox1.Text = person.age.ToString();
}
}
Form2
public partial class Form2 : Form
{
private Person _person;
public Person person
{
get { return _person; }
set { _person = value; }
}
public Form2()
{
InitializeComponent();
}
private void btnGet_Click(object sender, EventArgs e)
{
this.textBox1.Text = _person.age.ToString();
}
private void btnChange_Click(object sender, EventArgs e)
{
_person.changeAge(2);
}
}
无论修改form1/form2中的person 的age值,另外一个的也跟着改变,这是因为两个form引用的是同一个person对象。当我们想在form之间传值时,而且还想让值同步,那么就把这些值作为一个class的属性,传递这个class。
如果要传递的是一般数据类型(int , string等 ),那么这些数据在form之间是没有联系的,因为C#在定义这些数据类型时,就默认new了他们,例如:int i ; 和int i = new int() 。
class temp
{
int i;
int[] mm;
public temp()
{
mm = new int[10];
}
}
3.用含参构造函数:
在form2中定义含参构造函数,form1中调用传参即可。
4.代理
在form2中定义代理函数,并通过代理函数传递返回值
form2
public delegate void returnValue( int i );
public returnValue returnTheValue;
private void button1_Click(object sender, System.EventArgs e)
{
if ( returnTheValue != null )
returnTheValue( 8 );
}
在form1中定义被代理方法,并调用form2中的代理方法
form1
private void button1_Click(object sender, System.EventArgs e)
{
Form2 temp = new Form2( );
temp.returnTheValue = new Form2.returnValue( showValue );
temp.Show();
}
private void showValue( int i )
{
textBox1.Text = i.ToString();
}
点击form2的button,form1中的textbox中的值就会相应变化。
在这四个方法中,
第一个是双向传值,也就是说,form1和form2改变i的值,另一方也会受到影响。
第二个方法可以单向也可以双向传值。
第三个方法是form1->form2单向传值。
第四个方法是form2->form1单向传值。
参考:http://www.cnblogs.com/njnudt/archive/2007/08/03/841004.html