【发布时间】:2016-10-26 20:22:31
【问题描述】:
我有以编程方式创建的标签,并希望为每个标签提供特定的事件处理程序。所以,不要这样做:
AddHandler Label1.Click, AddressOf SomeSub1
AddHandler Label2.Click, AddressOf SomeSub2
AddHandler Label3.Click, AddressOf SomeSub3
...
我希望将它变成一个循环以避免上述情况。所以我做了:
- 标签列表
- 我已经构建的所有私有子类的 MethodInfo 数组,该类继承自标签所在的主类
我使用了上面的内容并想出了以下内容:
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
有没有办法可以从MethodInfo 对象中获取适当的AddressOf?
【问题讨论】:
-
可能更容易制作自定义控件并覆盖onClick事件stackoverflow.com/questions/6405458/…
-
您在
New Label()上注册 Click 事件,而不是您在表单上使用的标签。New关键字在这里是描述性的。可以肯定的是,这是行不通的,这些标签甚至都不可见。 -
我删掉了很多额外的东西来将它们添加到我的 MainForm 中。它们被添加,给定文本、字体、大小和其他地方的所有东西。我只是没有在这里做,所以只有我遇到问题的部分可以专注于。很抱歉造成混乱。
标签: vb.net