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

 

 

 

转载于:https://www.cnblogs.com/myparamita/archive/2010/10/27/1862543.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值