windows form之间传值
时间:2010-10-27 来源:因是因非
在windows form之间传值,大概有四个方法:全局变量、属性、窗体构造函数和delegate。
1.全局变量:
在form1中定义一个public static类型的变量s,在form2中直接以form1.s的形式引用即可。
2.利用属性
如果传递的内容为类,则是按地址(引用)来传递的。
假设有两个form和一个Person.cs的类文件。通过form1 来调用form2 。程序如下:
public class Person
{
public int age=0;
public void changeAge(int _age)
{
this.age=_age;
}
}

public partial class Form1 : Form
{
private Person person;
public Form1()
{
InitializeComponent();
person = new Person();
Form2 form2 = new Form2();
form2.person = this.person;
form2.Show();
}
private void Form1_Load(object sender, System.EventArgs e)
{
//pass person to form2 and popup form2
}
//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.cs
运行程序你会发现,无论修改form1/form2中的person 的age值,另外一个的也跟着改变,这是因为两个form引用的是同一个person对象。当我们想在form之间传值时,而且还想让值之间有一定的联系,那么就把这些值用class来包起来,再传。这样又清楚又省事。
如果你传的不是类而是一般数据(int , string )等,那么这些数据在form之间是没有联系的,因为C#在定义这些数据类型时,就默认new了他们,例如:int i ; 和int i = new int() ;。像下面这样的 class :
class temp
{
int i ;
int[] mm;
public temp ()
{ mm = new int [10] ; }
}
在form之间传递时,变量 i 是两个窗体共用的,但是mm 却不是,其原因就是我上面讲的那样,所以利用property的这个特性,我们可以灵活的在form之间传递我们想变和不想变的值。
3.用含参构造函数:
Form2 的构造函数:
public Form2( int i )
{
InitializeComponent();
textBox1.Text = i.ToString();
}
Form1 内调用
Form2 temp = new Form2( 9 );
4.Delegate
Form2中先定义一个delegate
public delegate void returnvalue( int i );
public returnvalue ReturnValue;
form2 中的button按钮代码如下:
private void button1_Click(object sender, System.EventArgs e)
{
if ( ReturnValue != null )
ReturnValue( 8 );
}
Form1中的button按键如下:
private void button1_Click(object sender, System.EventArgs e)
{
Form2 temp = new Form2( );
temp.ReturnValue = new temp.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单向传值。
还有一个就是用event,和delegate差不多
源自:http://www.cnblogs.com/njnudt/archive/2007/08/03/841004.html 稍作修改