我有以编程方式创建的标签,并希望为每个事件处理程序提供特定的事件处理程序。所以,不是这样做的:
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吗?
发布于 2016-10-26 20:23:40
[Delegate].CreateDelegate已经创建了一个委托对象;您不应该使用AddressOf。
不过,你可能需要投它。
https://stackoverflow.com/questions/40271497
复制相似问题