首页 新闻 会员 周边 捐助

自定义事件和委托

0
悬赏园豆:100 [待解决问题]

以前都是用写好的事件 双击就可以用

现在要自定义事件,但是没有理解里面的原理,只是把步骤背下来了,我不想这样求高手给我详细解释下

我知道首先是定义了一个事件public class clcikeventargs:event

然后一个委托 public  Delegate void clcikevenhanlder(object sendr,clcikeventargs e)

然后 public event clcikevenhanlder click;

然后触发Onclick

然后再this.Onclick = new clcikeventargs(e)

然后是注册+= 

然后实现+=new 出来里面那个方法

我就是这样的

完全没有理解到

请高手详细说明下

问题补充:

还是没有理解到啊 那些时间层层往上抛。。到底该怎么抛

flybisu的主页 flybisu | 初学一级 | 园豆:119
提问于:2011-05-26 15:37
< >
分享
所有回答(2)
0

对于自定义事件,简单来说:

1,定义一个类成员(这个成员是一个事件)

class YourClass
{
public event EventHandler<EventArgs> YourEvent;
}

也就是定义一个委托类型的成员,这个成员(委托)是一个函数指针。

 

2,在你需要激发事件的时候,调用这个函数指针

    

this.YourEvent(new EventArgs());

可以了.....都在这里了 :)

 

对于事件的使用者,

1,只需要订阅(subscribe)这个事件

YourClass cls = new YourClass();

cls.YourEvent
+= EventHandler<EventArgs>(YourHandlerFunction)

2,当特定事件发生时,事件源你的YourClass就是通过委托(其实就是指针)调用这个YourHandlerFunction

public void YourHandlerFunction(EventArgs e)

{

//客户代码事件处理函数

}

Jerry Chou | 园豆:2642 (老鸟四级) | 2011-05-26 17:16
0

声明委托(用来储存方法),再声明事件(用来来管理委托),然后再此类触发位置用事件来调用相应委托存储的方法。在调用方添加方法到这个类事件列表中,填充这个方法。

public delegate void ErrorDelegate(object sender, Exception ex);
public event ErrorDelegate ErrorEvent;

void OnError(object sender, Exception ex)
{
if (ErrorEvent != null)
ErrorEvent(sender, ex);
}

此类中调用 OnError(
this, ex);

慧☆星 | 园豆:5722 (大侠五级) | 2011-05-27 09:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册