如何从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参数实际上是有效的,但是,我不能传递发送者。
我认为如果您将委托分配给引用,就可以解决问题,像这样:
var del = delegate { myClickHandler(thiselement, EventArgs.Empty); };
,然后附加和分离同一个委托对象,而不是附加一个委托并分离另一个委托:
thiselement.AttachEventHandler("onclick", del);
thiselement.DetachEventHandler("onclick", del);