窗体之间传递数据

我们经常需要在两个窗体间传递数据,我从前都是使用类的静态变量来进行传递.后来有人说这是严重违反了OOP思想,确实是这样,而且这个方法在多线程的程序中很不适用.目前我们使用的比较多情况就是在某个新窗体出现时,需要传递一些参数,这里我通常是重载新窗体的构造函数
比如:

原构造函数:


public Form2()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

我们将这个方法复制粘贴一份以后修改新的构造方法,参数可以随意指定

public Form2(string parameter1,int parameter2)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

我们在调用时(假设主窗体是Form1)直接使用:Form2 form2=new Form2(str1,str2);
这样就可以把两个参数传递到Form2中了.如果是在多线程中,需要两个窗体同时操作的,还可以考虑使用公有变量,但要注意保护锁的问题.
再说说如果Form2中产生了一些数据,如何传递给Form1.
目前我认为比较好的方式是使用自定义事件.
首先,我们根据需要回传的数据定义一个事件数据提供类型,在这里我假设要回传两个数据,一个是整型(int),一个是字符串(string)那么定义下边的类.注意:这个类一定要从System.EventArgs继承


public class ReturnEventArgs:System.EventArgs
{
  public string strMsg;
public int intMsg;
public ReturnEventArgs()//编写构造函数,可以使用参数的形式直接构造字段或属性
{}
}

我们在Form2里定义1个代理:

public delegate void ReturnDataEventHandler(object sender,ReturnEventArgs e);

再定义一个事件

public event ReturnDataEventHandler ReturnMsg;

在窗体中再添加一个按钮,在按钮的单击事件里写下:

public void button1_click(object sender,System.EventArgs e)
{
ReturnEventArgs rea=new ReturnEventArgs();
rea.strMsg="字符串参数";
rea.intMsg=100;
if(ReturnMsg!=null)//加此判断的作用是为了在此事件未实现的时候不会出现错误
{
ReturnMsg(this,rea);
}
}

在Form1里生成Form2的时候:

Form2 frm=new Form2();
frm.ReturnMsg+=Form2.ReturnMsg(frm_ReturnMsg);
并直接生成事件处理函数
public void frm_RetrunMsg(object sender,ReturnEventArgs e)
{
//这里就可以直接使用事件数据类e所包含的数据
string str=e.strMsg;
int i=e.intMsg;
}

转帖。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值