为自定义控件添加自定义事件2011-10-25 博客园 ShawnJiNet事件,委托,总是看起来有点绕,不过本文不介绍这些,只说说如何为自定义控件添加自定义事件。本文所说的自定义控件,非继承其他现有Microsoft控件或者组合控件,而是完全继承UserControl的 东西。既然不是继承自其他现有控件或者控件组合,在特定需求下,有添加自定义事件的可能性,或者对继 承自UserControl而得到的事件进行些许扩展,以期以简便的方式得到更丰富的信息等等。下面简单介绍2个例子,有用之人作为参考,大拿级别的,ignore吧。例1. 添加完全自定义事件。需求:假设客户端(指添加了自定义控件的窗体等等)想知道用户是否在控件上按下的Shift键(当然,可以 通过KeyPress之类的事件来判断,没必要再自己整个事件,例子只是个例子),控件作者想通过一个特殊 的方式来进行判断,这就可以选择自定义事件。好吧,起个名字,叫Custom,需要客户端在触发Custom时得到一个布尔属性Flag来判断用户是否按下 Shift。按部就班:(1)创建事件
// 创建事件 public event CustomEventHandler Custom;
有问题,CustomEventHandler是什么,当然,这里需要一个委托,于是还是搞定这个委托(2)定义委托
// 定义委托 public delegate void CustomEventHandler(object sender, CustomEventArgs e);
CustomEventHandler搞定了,又有新问题:CustomEventArgs是啥,其实需要CustomEventArgs来获得 你需要的数据,CustomEventHandler,于是还要定义个CustomEventArgs(这个东西必须继承自 System.EventArgs),在CustomEventArgs里面定义需要的数据属性:Flag(3)定义EventArgs
// 自定义EventArgs,并添加自定义属性【Flag】 public sealed class CustomEventArgs : EventArgs { private bool testFlag; public CustomEventArgs(bool testFlag) { this.testFlag = testFlag; } public bool Flag { get { return testFlag; } } }