winform中通过事件实现窗体传值思路【待修改】

Form2向Form1传值


        private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象
        public void SetTextValue(object sender, EventArgs e)//sender 事件源,e包含事件数据的类的基类的对象
        {
            if (sender is Form1)
            {
                form1 = sender as Form1;
            }
            MyEventArgs me = (MyEventArgs)e;
            txtNum2.Text=me.Text;
        }
        public event EventHandler eh2;//定义一个系统事件类型的事件


        private void btnBack_Click(object sender, EventArgs e)
        {
            MyEventArgs me = new  MyEventArgs();
            me.Text = txtNum2.Text;


            eh2 += new EventHandler(form1.SetTextVaule);//注册事件
            if (eh2 != null)
            {
                eh2(this,me);//执行事件
            }
            this.Close();
        }
    }


[注]:
1 为什么要定义MyEventArgs?
要通过事件传值,需要定义事件,定义事件需要事件源,包含事件数据的类,而引用系统提供的事件时,系统事件里仅有
    // 摘要:
        //     表示没有事件数据的事件。
        public static readonly EventArgs Empty;


        // 摘要:
        //     初始化 System.EventArgs 类的新实例。
        public EventArgs();
两项,当需要通过事件传递额外的值则不能满足,此时需要自己定义事件类,而此时又容易报
------------------
"无法将类型“System.EventArgs”转换为“_02_事件窗体传值.MyEventArgs”
委托“System.EventHandler”有一些无效参数
参数 2: 无法从“_02_事件窗体传值.MyEventArgs”转换为“System.EventArgs”
------------------
的错误,所以此时为了解决如上问题,可让自定义事件类继承系统定义事件类.
public class MyEventArgs:EventArgs
    {
       public string Text { get; set; }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值