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

本文关键字:事件处理 程序 分离 对象 HtmlElement | 更新日期: 2023-09-27 18:15:28

首先,我是这个论坛的新手,对编程也比较陌生。我的问题是,我不能分离以前附加的事件处理程序。至少,下面代码中的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参数实际上是有效的,但是,我不能传递发送者。

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

我认为如果您将委托分配给引用,就可以解决问题,像这样:

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

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

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