读者你好:
关于添加事件分为以下两种情况:
1、控件自身带有相关事件,这种情况右键单击控件,选择“属性菜单项”,在属性窗口的事件页中双击某个事件,就可以生成该事件对应的处理方法。
2、自定义事件,请参考下面的说明:
假定你要为自定义控件MyControl写自定义事件MyEvent,其中MyControl扩展自System.Windows.Forms.UserControl。以下是关键步骤:
1.声明公有的delegate,这里我们命名为MyEventHandler。MyEventHandler有两个参数。Object对象sender和MyEventArgs对象e。关于MyEventArgs我们将在后面定义。需要注意的是delegate必须声明在你的自定义控件之外。
public delegate void MyEventHandler(object sender,MyEventArgs e);
public class MyControl:UserControl
{
……
}
2.1中的MyEventArgs是这样一个对象,它持有由事件发生者传递给事件接收者的数据。MyEventArgs必须继承自System.EventArgs。这时的代码如下:
public class MyEventArgs:System.EventArgs
{
……
}
public delegate void MyEventHandler(object sender,MyEventArgs e);
public class MyControl:UserControl
{
……
}
需要在MyEventArgs类中写一些具体实现。这一点我们会在以后讲到。
3.在自定义控件类中,声明一个事件,声明为MyEvent。
public class MyEventArgs:System.EventArgs
{
……
}
public delegate void MyEventHandler(object sender,MyEventArgs e);
public class MyControl:UserControl
{
public event MyEventHandler MyEvent;
……
}
4.在自定义控件类中,声明受保护的虚方法,命名规则是在事件名字的前面加上On。既然我们的事件命名为MyEvent,那么这个方法就叫做OnMyevent。OnMyevent方法有一个MyEventArgs类型的参数。这个方法用来生成事件。在c#中直接调用事件名字来生成事件。生成事件需要传递两个参数:事件发生者和传递给方法的参数MyEventArgs。
public class MyEventArgs:System.EventArgs
{
……
}
public delegate void MyEventHandler(object sender,MyEventArgs e);
public class MyControl:UserControl
{
public event MyEventHandler MyEvent;
protected virtual void OnMyEvent(MyEventArgs e)
{
MyEvent(this,e);
}
……
}
5.最后一步就是在自定义控件类中实际地调用OnMyEvent。