忆龙2009:使用自定义事件
2010-01-10 15:05
218 查看
事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。 在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。 委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行库提供实现。下面的示例显示了事件委托声明。 public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。
只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System.EventHandler 便足够了。本例中我们使用了不带参数的事件。其声明如下:
delegate void EventHandler(object sender, EventArgs e);
下面的示例程序演示了如何使用自定义事件。
当魔方的状态发生变换时,通过RaiseCubeStatusChangedEvent()引发一个事件,然后在DisplayMagicCubeOnEvent()中对该事件进行处理,显示魔方变换后的状态。
public delegate void CubeStatusChangedHandler(object sender, EventArgs e); //声明魔方状态改变的事件委托 public event CubeStatusChangedHandler CubeStatusChanged; //定义魔方状态改变事件 protected virtual void OnCubeStatusChanged(EventArgs e)
{
CubeStatusChangedHandler handler = CubeStatusChanged;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
} private void RaiseCubeStatusChangedEvent() //魔方状态改变后触发事件
{
EventArgs e = new EventArgs();
System.Threading.Thread.Sleep(300);
OnCubeStatusChanged(e);
} public void InitCubeRandom(Int16 iStep)
{
Int16 i = 0; InitCubeStatus();
RaiseCubeStatusChangedEvent(); //触发魔方状态改变事件 for (i = 0; i < iStep; i++)
{
RandomGoOneStep();
RaiseCubeStatusChangedEvent(); //触发魔方状态改变事件
} } public Form1()
{
InitializeComponent();
DisplayMagicCube();
cube.CubeStatusChanged += DisplayMagicCubeOnEvent; //将事件处理函数挂接到CubeStatusChanged 事件
} private void DisplayMagicCubeOnEvent(object sender, EventArgs e)
{
DisplayMagicCube(); //显示魔方当前状态
}
该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。
只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System.EventHandler 便足够了。本例中我们使用了不带参数的事件。其声明如下:
delegate void EventHandler(object sender, EventArgs e);
下面的示例程序演示了如何使用自定义事件。
当魔方的状态发生变换时,通过RaiseCubeStatusChangedEvent()引发一个事件,然后在DisplayMagicCubeOnEvent()中对该事件进行处理,显示魔方变换后的状态。
public delegate void CubeStatusChangedHandler(object sender, EventArgs e); //声明魔方状态改变的事件委托 public event CubeStatusChangedHandler CubeStatusChanged; //定义魔方状态改变事件 protected virtual void OnCubeStatusChanged(EventArgs e)
{
CubeStatusChangedHandler handler = CubeStatusChanged;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
} private void RaiseCubeStatusChangedEvent() //魔方状态改变后触发事件
{
EventArgs e = new EventArgs();
System.Threading.Thread.Sleep(300);
OnCubeStatusChanged(e);
} public void InitCubeRandom(Int16 iStep)
{
Int16 i = 0; InitCubeStatus();
RaiseCubeStatusChangedEvent(); //触发魔方状态改变事件 for (i = 0; i < iStep; i++)
{
RandomGoOneStep();
RaiseCubeStatusChangedEvent(); //触发魔方状态改变事件
} } public Form1()
{
InitializeComponent();
DisplayMagicCube();
cube.CubeStatusChanged += DisplayMagicCubeOnEvent; //将事件处理函数挂接到CubeStatusChanged 事件
} private void DisplayMagicCubeOnEvent(object sender, EventArgs e)
{
DisplayMagicCube(); //显示魔方当前状态
}
相关文章推荐
- 忆龙2009:使用自定义事件
- Dialog 自定义使用3(回调点击事件)
- 友盟自定义事件的使用方法
- c#自定义事件的使用方法
- 忆龙2009:如何使用iMC实现帐号的导出功能
- AlertDialog中使用自定义View,view中的Button如何设置点击事件监听
- Canvas的使用,放大缩小的自定义布局,不同的位置不同的点击事件
- 忆龙2009:webBrowser使用技巧
- ABAP--通过自定义类使用ALV(相应事件)的代码
- 忆龙2009:如何使用iMC实现帐号的导出功能
- 自定义android用户控件,使用回调函数实现自定义事件
- PowerBuilder 使用自定义事件触发键盘Enter事件
- c#自定义事件的使用方法
- 使用xib 自定义UITableViewCell 按钮无法点击事件
- onload事件——使用自定义addOnload(函数)设置多重onload属性
- 忆龙2009:使用ACS进行机器跨域认证出现错误:"NTLIB: Could not find machine host"
- 使用泛型的自定义事件类来取代自定义事件定义的参数
- quick cocos2dx-Lua中的自定义事件的使用
- 忆龙2009:使用EAP-TLS试图连接到RAS服务器时验证失败
- 在C#使用字典存储事件示例及实现自定义事件访问器