如何编写C# 自定义事件

借鉴了网上的一些资料,这里介绍下简单的自定义事件编写,有不足之处,见谅。

第一步:首先得有一个包含事件数据的载体,继承至 System.EventArgs

其中包括了包含事件数据载体的构造函数,设定的一些需要参数或属性。

例如:

    /// <summary>

    /// 事件数据

    /// </summary>

    public class NumberReachedArgs : System.EventArgs

    {

        private string _var;

        // 构造函数

        public NumberReachedArgs(int m)

        {

            _var = m.ToString();

        }

        // 属性

        public string ReachNumer

        {

            get

            {

                if (_var == "1")

                {

                    return "This is OK";

                }

                else

                {

                    return "This is Wrong";

                }

            }

        }

}

第二步:声明一个委托

 public delegate void NumberReachedHadler(object sender, NumberReachedArgs e);

 这里有2个参数  object sender 这里就不介绍了。

NumberReachedArgs e 为第一步中你的事件数据类型的数据

 

第三步:编写承载你的事件的类,其中包含了你的事件,触发事件,事件触发的方法。

    class Events

    {

        // 定义事件

        public event NumberReachedHadler OnNumReached;

 

        // 事件触发方法

        public void OnEvent(NumberReachedArgs e)

        {

            if (OnNumReached != null)

            {

                OnNumReached(this, e);

            }

        }

 

        // 触发事件

        public void CountTo(int end)

        {

            NumberReachedArgs e = new NumberReachedArgs(end);

            OnEvent(e);

        }

    }

到这里自定义事件已经编写完成。

然后是调用已经编写好的自定义事件

1 .首先是注册事件

Events my = new Events();

  my.OnNumReached += new NumberReachedHadler(GetTraffic);

2. 然后就是触发事件

my.CountTo(1);

3.       

public void GetTraffic(object sender, NumberReachedArgs e)

        {

            // e 中包含了之前设定的属性值,或者其他

            MessageBox.Show(e.ReachNumer.ToString());

}

 

 

完整代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsFormsApplication5

{

    public partial class Form1 : Form

    {

        Events my = new Events();

        public Form1()

        {

            InitializeComponent();

            //my.OnNumReached += new NumberReachedHadler(GetTraffic);

            //my.CountTo(1);

        }

 

        public void GetTraffic(object sender, NumberReachedArgs e)

        {

            MessageBox.Show(e.ReachNumer.ToString());

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            my.OnNumReached += new NumberReachedHadler(GetTraffic);

            my.CountTo(1);

        }

    }

 

    public delegate void NumberReachedHadler(object sender, NumberReachedArgs e);

 

    /// <summary>

    /// 事件数据

    /// </summary>

    public class NumberReachedArgs : System.EventArgs

    {

        private string _var;

        // 构造函数

        public NumberReachedArgs(int m)

        {

            _var = m.ToString();

        }

        // 属性

        public string ReachNumer

        {

            get

            {

                if (_var == "1")

                {

                    return "This is OK";

                }

                else

                {

                    return "This is Wrong";

                }

            }

        }

    }

 

    class Events

    {

        // 定义事件

        public event NumberReachedHadler OnNumReached;

 

        // 事件触发方法

        public void OnEvent(NumberReachedArgs e)

        {

            if (OnNumReached != null)

            {

                OnNumReached(this, e);

            }

        }

 

        // 触发事件

        public void CountTo(int end)

        {

            NumberReachedArgs e = new NumberReachedArgs(end);

            OnEvent(e);

        }

    }

}

posted @ 2013-06-27 17:26  Client  阅读(587)  评论(0)    收藏  举报