分享

C# 自定义参数的 事件委托

 Jcstone 2013-01-30

C# 自定义参数的 事件委托


上今天学习了一下自定义参数的事件,委托和默认参数不同的是委托对应的函数原型的参数为(object sender,  MyEvent e),
而不再是(object  sender, EventArgs e), 其中MyEvent为继承自EventArgs类的自定义类,下面用一个例子来说明。



---------------------------------DEMO--------------------------------------------

新建一个窗体应用程序

using System;

using System.Windows.Forms;

namespace 事件_自定义参数1

{

    public partial class MyForm : Form

    {

        private delegate int MyFirstEventHandler(object sender, MyEvenArgs e);  //1 声明一个委托


        private event MyFirstEventHandler  myEvent;                                     //2 声明一个事件



        public MyForm()                                                                                       //Form构造函数

        {

            InitializeComponent();

            myEvent += new MyFirstEventHandler(OnMyFirst);                    //4 绑定事件处理函数

        }


        private void btnArgsEvent_Click(object sender, EventArgs e)              //按钮点击

        {

            MyEvenArgs eve = new MyEvenArgs(26, 165);                              //5 自定义参数类

            myEvent(sender, eve);                                                                        //6 调用

        }


        public int OnMyFirst(object sender, MyEvenArgs e)                         //3 定义事件处理函数

        {

            string str = null;

            str = string.Format("first para is {0}, second para is {1}", e.Age, e.Height);

            MessageBox.Show(str);

            return 0;

        }

    }

}


-----------------------------------自定义参数类---------------------------------------------

//自定义参数类,继承自EventArgs类

using System;


namespace 事件_自定义参数1

{

    public  class MyEvenArgs EventArgs                    //继承自EventArgs类

    {

        private int _Age;                   //数据成员

        public int Age                       //属性

        {

            get { return _Age; }

            set { _Age = value; }

        }


        private float _Height;              //数据成员

        public float Height                 //属性

        {

            get { return _Height; }

            set { _Height = value; }

        }


        public MyEvenArgs(int age = 25, int height = 180)  //带默认参数的构造函数

        {

            this._Age = age;

            this._Height = height;

        }


    }

}




步骤:

0 自定义一个参数类,该类继承自类EventArgs

public class MyEventArgs EventArgs

{

    //codes

    //数据成员...

    //属性成员...

    //构造函数和其他函数

}



①声明一个委托

[修饰符]   delegate  返回值类型   MyNameEventHandler(object sender,  MyEventArgs e);

注意:该委托的参数,两个参数,第一个参数sender是发起者,第二个参数e就是自定义参数类类型。


②声明一个事件

[修饰符]  event  MyNameEventHandler  eventName; 

注意:event为关键字, MyNameEventHandler 第①步声明的委托, eventName为该事件名称。


③定义事件处理函数

[修饰符]   返回值类型   OnMyName(object  sender,  MyEventArgs e)

{

    //codes

    //这里可以根据实际情况使用对象参数e的属性或数据成员(如果可以访问到的话)或者其他函数

}


④绑定事件

eventName += new MyNameEventHandler(OnMyName);

注意:注意后面括号里的参数为函数名


⑤定义参数对象, 触发事件

MyEventArgs  eve = new MyEventArgs(参数s);         //构造函数,参数s根据实际情况来

eventName(sender, eve);                                           //参数sender根据实际情况来

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多