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; }
    }
posted @ 2014-02-12 18:26  Dream_It_Possible  阅读(185)  评论(0编辑  收藏  举报