上一篇博客写了默认参数的事件, 今天学习了一下自定义参数的事件,委托。
和默认参数不同的是委托对应的函数原型的参数为(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根据实际情况来