如何从HtmlElement对象中分离事件处理程序? C#

时间:2013-05-27 15:48:47

标签: c# html events event-handling

首先,我是这个论坛的新手,对编程来说相对较新。 我的问题是我无法分离先前附加的事件处理程序。至少,以下代码中的DetachEventHandler不会这样做:

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

它显然不起作用,因为事件处理程序中的代码执行的次数与我调用 addHandlersToElements 的次数相同,也就是说,附加工作但是分离没有。

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

new EventHandler(myMouseoverEventHandler)

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

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

thiselement.AttachEventHandler("onclick", del);
thiselement.DetachEventHandler("onclick", del);