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];
}
}
例如上面代码中temp类在form之间传递时,变量i是两个窗体共用的,但是mm 却不是,其原因就是我上面讲的那样,所以利用property的这个特性,我们可以灵活的在form之间传递我们想变和不想变的值。

 

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

 

 

 

posted @ 2010-10-27 13:29  因是因非  阅读(275)  评论(0编辑  收藏  举报