如果VB.NET中没有';不存在
我正在尝试对ASP.NET网页中的多个控件使用单个事件处理程序。我想在运行时添加事件处理程序,只要它不存在。在C#中,我将按如下所示编写:如果VB.NET中没有';不存在,vb.net,events,Vb.net,Events,我正在尝试对ASP.NET网页中的多个控件使用单个事件处理程序。我想在运行时添加事件处理程序,只要它不存在。在C#中,我将按如下所示编写: if(myTextBox.OnTextChanged==null) { myTextBox.OnTextChanged+=DotTextChangingValidation; } 同样,我知道可以按如下方式删除事件处理程序: if(myTextBox.OnTextChanged!=null) { myTextBox.OnTextChanged-=DotTe
if(myTextBox.OnTextChanged==null)
{
myTextBox.OnTextChanged+=DotTextChangingValidation;
}
同样,我知道可以按如下方式删除事件处理程序:
if(myTextBox.OnTextChanged!=null)
{
myTextBox.OnTextChanged-=DotTextChangingValidation;
}
我知道如何在Visual Basic中添加和删除事件处理程序。。。但是我如何确定如何检查它是否已被分配?对于此场景,不需要在Visual Basic中执行检查。正常的remove语法非常聪明,如果异常已经消失,就不会向您抛出异常。无论是在C#还是在Visual Basic中,您都无法从对象外部执行此操作。一个事件基本上是两个访问器:
add
和remove
。如果手动编码,则会立即看到:
public event EventHandler Click
{
add { ... }
remove { ... }
}
这些方法变成了add\u Click(EventHandler)
和remove\u Click(EventHandler)
方法。即使使用默认事件实现
public event EventHandler Click;
它仍然没有什么不同,除了使用默认实现为您生成访问器,默认实现使用与事件同名的私有多播委托字段来存储这些处理程序
这意味着两件事:
add
或remove
处理程序,因为只有访问器是公开的。没有可列出当前已注册处理程序的访问器如果你想做这类事情,需要在提供事件的类中完成——要么编写你自己的
add
和remove
来检查重复,要么通过属性公开私有字段。你编写的代码不会在C#中编译。在类外部,您只能对事件执行两项操作:添加处理程序或删除处理程序。无法获取处理程序列表,因此myTextBox.OnTextChanged
不会是返回委托的表达式。考虑到这一点,不清楚你在C#中实际在做什么,因此也不清楚你在VB中想做什么。好吧,所以我在C#中能做什么和不能做什么上错了。基本上,我试图做的是防止同一个处理程序被多次添加到控件中。我想确保在任何给定的时间内,分配给事件的处理程序不超过1个。如果没有更多的事件被处理,那么.net可能应该引发异常。你觉得怎么样?@Tony-如果你喜欢这种行为,你可以用C。但请注意它给c#程序员带来的问题——他们必须编写的额外代码,所有不正确(错误)的实现,当您尝试删除不存在的处理程序时,etcIt确实会抛出nullreferenceexception。