2016-10-26 3 views
1

У меня есть метки, которые я создал программно, и хочу, чтобы каждый обработчик событий передавал каждому из них. Итак, вместо этого:Получите 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 объекта?

+0

может быть проще сделать пользовательский контроль и переопределить событие onClick http://stackoverflow.com/questions/6405458/how-do-i-make-custom-controls-in-c – Slai

+0

Вы регистрируете событие Click на 'New Label()', а не на этикетках, которые вы используете в своей форме. Ключевое слово 'New' здесь описательно. Так что, конечно, это не работает, эти ярлыки даже не видны. –

+0

Я вырезал много лишних вещей, которые я делаю, чтобы добавить их в свой MainForm. Они добавляются с учетом текста, шрифта, размера и всего этого в другом месте. Я просто не делал этого здесь, чтобы сосредоточиться только на той части, с которой я столкнулся. Извините за путаницу. –

ответ

1

[Delegate].CreateDelegate уже создает объект-делегат; вы не должны использовать AddressOf.

Возможно, вам потребуется бросить его.

+0

Человек ... я плохо в этом. Я создал EventDelegate, когда уже есть встроенный объект EventHandler. Я сделал внесенное изменение, и это полностью исправило его. Благодарю. –

Смежные вопросы