我有以编程方式创建的标签,并希望为每个标签提供特定的事件处理程序。所以,而不是这样做:
AddHandler Label1.Click, AddressOf SomeSub1
AddHandler Label2.Click, AddressOf SomeSub2
AddHandler Label3.Click, AddressOf SomeSub3
...
我希望将它用于循环以避免上述情况。所以我做了:
我使用了以上内容并提出了以下内容:
Dim separateClass As New SeparateClass
Dim methodInfo() As MethodInfo = separateClass.GetType.GetMethods(BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly)
For i As Integer = 0 to End
labelList.Add(New Label())
AddHandler labelList.Last.Click, AddressOf [Delegate].CreateDelegate(GetType(SomeDelegate), separateClass, methodInfo(i)).GetMethodInfo
Next
这确实可以编译,但是没有触发Subs。以下也编译但行为相同:
For i As Integer = 0 to End
labelList.Add(New Label())
AddHandler labelList.Last.Click, AddressOf methodInfo(i).getBaseDefinition
Next
有没有办法可以从AddressOf
对象中获取相应的MethodInfo
?
答案 0 :(得分:1)
[Delegate].CreateDelegate
已经创建了一个委托对象;你不应该使用AddressOf
。
你可能需要施放它。