1

首先,我是这个论坛的新手,对编程也比较陌生。我的问题是我无法分离以前附加的事件处理程序。至少,以下代码中的 DetachEventHandler 没有这样做:

private void addHandlersToElement(HtmlElement thiselement)
{
        thiselement.DetachEventHandler("onclick", delegate { myClickHandler(thiselement, EventArgs.Empty); });
        thiselement.AttachEventHandler("onclick", delegate { myClickHandler(thiselement, EventArgs.Empty); });
}

它显然不起作用,因为事件处理程序中的代码执行的次数与我调用 addHandlersToElements的次数一样多,也就是说,attach 有效,但 detach 无效。

事实是,我对委托不太了解,只是它们是方法的包装器,可以将它们作为参数传递。我从一些帖子中窃取了这个委托{}块,因为这似乎是唯一可以将thiselement作为发送者对象传递的解决方案(我在我的实际处理程序方法中指的是)。使用

new EventHandler(myMouseoverEventHandler)

for 参数实际上有效,但是,AFAIK,我无法通过发件人。

任何帮助,将不胜感激。

4

1 回答 1

2

我认为如果您将委托分配给参考,它将解决问题,如下所示:

var del = delegate { myClickHandler(thiselement, EventArgs.Empty); };

然后附加和分离同一个委托对象,而不是附加一个委托并分离另一个:

thiselement.AttachEventHandler("onclick", del);
thiselement.DetachEventHandler("onclick", del);
于 2013-05-27T15:51:52.220 回答