使用事件和委托再两个窗体之间传递数据

本文介绍了一种在WinForms应用程序中实现窗体间数据双向传递的方法,通过定义委托和事件来完成form2向form1的数据回传,提供了一个简单易懂的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般情况下,在form1中使用如下方法显示form2

void showform2()
{
    form2 frm2
=new form2();//创建form2的新实例
    
//显示窗体
    frm2.Show();//或者frm2.ShowDialog()
}

 

以上做法中如果把以下语句声明为窗体级变量的话:

 form2 frm2=new form2();//创建form2的新实例

    这样可以在整个窗体中使用frm2这个实例,只要再frm2中声明公共变量或者把控件设为共有就可以放变得操作frm2中的数据了,从而达到由form1到form2的数据传递。

    但是这种方法是单向的,如果想把form2的数据传回form1的话,以上方法就不能实现了。刚刚在论坛上看到了几种窗体间传递数据的方法,其中利用事件和委托的方法没有详细介绍,自己试做了一下,并成功实现了功能,一下是详细的使用方法:
   
    1.在窗体form2中做以下工作
    

public delegate void dlsetform1(string ss);//声明一个委托
    public event dlsetform1 evsetform1; //声明一个事件
    private void DoSomething()//这个方法是为了把事件触发处理放在一起可以再应用时按需修改
    
//一个触发事件的方法,当这个方法被执行时,事件evsetform1开始运作了
    {
 dlsetform1 tempdl
=evesetform1;//初始化事件,现在事件已经委托给了tempdl
 tempdl("这是一次测试!");//tempdl执行,从而事件被触发了
    }

    
//可以再form2中的任意事件里触发事件,例如再窗体中一个按钮的单击事件中触发他
    private void button1_Click(object sender, EventArgs e)
    
{
 DoSomehing();
    }

    
//嘿嘿,窗体2的工作完成了是不是很简单啊。

 

    2.现在开始操作窗体form1,我们改一下刚才那个显示窗体2的方法

void showform2()
    
{
        form2 frm2
=new form2();//创建form2的新实例
        
//此处把frm2的evsetform1事件绑定到一个方法上,
 frm2.evsetform += frm2_SetForm1;    
       
//当evsetform1被触发时,这个方法将被执行注意,这个方法与form2中的委托dlsetform2的一致性
        
//显示窗体
        frm2.Show();//或者frm2.ShowDialog()
    }


    
//form2事件触发时执行的方法,其中的ss是form2传递过来的数据
    private void frm2_SetForm1(string ss)
    
{
 
this.text=ss;//这里把窗体form1的text属性设置为了frm2传递来的数据"这是一个测试!"
    }
  

    

    做到这里就大功告成了。是不是挺容易的。希望对于看到这篇文章的人可以有所启发。

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值