将EventHandler添加到未知类型的对象?

时间:2015-10-14 12:11:27

标签: vb.net events handler eventhandler addhandler

我们在运行时创建对象,因此在运行代码之前不知道它正在使用什么对象。我们想为在运行时创建的每个TextBox添加一个事件处理程序。但是当我们尝试AddHandler obj.Leave, AddressOf leaveControl时,编译器将不会运行该程序,因为“对象没有像Leave这样的事件”。

有没有办法将事件处理程序添加到未知类型的对象?

谢谢:)

4 个答案:

答案 0 :(得分:3)

VB.NET支持后期绑定来编写动态代码。这适用于属性和方法,但用于事件。奇怪的限制,我不知道它的技术原因。简而言之,在早期版本的Basic中,基于方法名称事件绑定是动态的,我从不需要它,我怀疑它与WithEvents关键字有关。

解决方法很简单,您需要使用Reflection。像这样:

    Dim obj As Object = New TextBox
    Dim evt = obj.GetType().GetEvent("Leave")
    evt.AddEventHandler(obj, New EventHandler(AddressOf leaveControl))

答案 1 :(得分:1)

你知道它是一个文本框,所以把它

AddHandler Ctype(obj,textbox).Leave,AddressOf leaveControl

答案 2 :(得分:1)

如果没有看到用于创建控件的代码,正如@Dom建议的那样,您可以使用以下内容检查您正在创建的控件类型(仅作为查看文本框的示例);

Dim tb As TextBox = TryCast(obj, TextBox)

If tb IsNot Nothing
    AddHandler tb.Leave, AddressOf leaveControl
End If

同样,这只是一个例子而不知道你在一开始就在做什么的全部范围

答案 3 :(得分:1)

你想要的是这些方面:

If obj.GetType() Is GetType(TextBox) then
   AddHandler obj.Leave, Address myNewRoutine
End If

请注意,您不能只使用TextBox再次使用GetType。

相关问题