以编程方式在VB.NET中添加事件处理程序(如果它不存在)
我正在尝试为ASP.NET网页中的几个控件使用单个事件处理程序.我想在运行时添加事件处理程序,当且仅当它不存在时.在C#中,我会写如下:
if (myTextBox.OnTextChanged == null) { myTextBox.OnTextChanged += DoTextChangingValidation; } 同样,我知道我可以删除事件处理程序,如下所示: if (myTextBox.OnTextChanged != null) { myTextBox.OnTextChanged -= DoTextChangingValidation; } 我知道如何在Visual Basic中添加和删除事件处理程序…但是如何确定如何检查它是否已经分配? 解决方法
您无法在C#或Visual Basic中从对象外部执行此操作.一个事件基本上是两个访问者:添加和删除.如果您手动编码,它立即可见:
public event EventHandler Click { add { ... } remove { ... } } 这些变为add_Click(EventHandler)和remove_Click(EventHandler)方法.即使您使用默认事件实现, public event EventHandler Click; 除了使用默认实现为您生成访问器之外,它仍然没有什么不同,默认实现使用与事件同名的私有多播委托字段来存储这些处理程序. 这意味着两件事: >对于该类的客户,他们可以对事件做的唯一两件事是添加或删除处理程序,因为只有访问者被暴露.列出当前注册的处理程序没有访问权限 这实际上是故意的.原因是:对象可能是共享的,而其他代码可能已为其事件注册了其处理程序.如果您可以访问处理程序列表,则可以自己调用它们,可能会违反合同,并以类所有者不想要的方式访问私有方法. 如果你想要这样的东西,它需要在提供事件的类中完成 – 要么编写自己的add和remove来检查dupes,要么通过属性公开private字段. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |