У меня есть метки, которые я создал программно, и хочу, чтобы каждый обработчик событий передавал каждому из них. Итак, вместо этого:Получите AddressOf от объекта MethodInfo
AddHandler Label1.Click, AddressOf SomeSub1
AddHandler Label2.Click, AddressOf SomeSub2
AddHandler Label3.Click, AddressOf SomeSub3
...
Я надеялся работать в петле, чтобы избежать вышеизложенного. Так что я сделал:
- список Этикетки
- MethodInfo массив из всех моих уже построенных, Частные Subs в классе, который унаследован от основного класса, где метки
Я вышеизложенное и придумал следующее:
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
объекта?
может быть проще сделать пользовательский контроль и переопределить событие onClick http://stackoverflow.com/questions/6405458/how-do-i-make-custom-controls-in-c – Slai
Вы регистрируете событие Click на 'New Label()', а не на этикетках, которые вы используете в своей форме. Ключевое слово 'New' здесь описательно. Так что, конечно, это не работает, эти ярлыки даже не видны. –
Я вырезал много лишних вещей, которые я делаю, чтобы добавить их в свой MainForm. Они добавляются с учетом текста, шрифта, размера и всего этого в другом месте. Я просто не делал этого здесь, чтобы сосредоточиться только на той части, с которой я столкнулся. Извините за путаницу. –