如何编写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);
}
}
}

浙公网安备 33010602011771号