Ручки кнопок после создания кнопок в коде

Ранее я создал кнопки в своем коде, как показано ниже:

Dim Itm As New Button
Itm.Name = "Itm" & i
Itm.Height = 62
Itm.Width = 159
Itm.Text = Temp(i, 0).ToUpper
Itm.Left = (F * 165)
Itm.Visible = True
Itm.BackColor = Colour
Itm.ForeColor = Color.Black
Me.pnlItemButton1.Controls.Add(Itm)

Когда я запускаю форму, кнопки создаются, но теперь мне нужно создать подпрограмму событий, когда нажимаются новые кнопки. Я пробовал это:

    Private Sub Itm1_click(ByVal sender As System.Object, 
                 ByVal e As System.EventArgs) Handles Itm1.click

End Sub

Но получите сообщение об ошибке, что «предложение дескриптора требует с WithEvent»

Итак, как я могу это сделать?

Кроме того, количество кнопок - Itm(i) является переменным, так как я могу создать дескриптор, который будет учитывать от Itm1 до Itm99?


person James.Net    schedule 14.10.2015    source источник
comment
Возможный дубликат обработчика событий динамического нажатия кнопки   -  person DieVeenman    schedule 14.10.2015


Ответы (2)


Когда вы определяете динамически добавляемую кнопку, она не существует во время выполнения, поэтому вы не можете установить такой обработчик событий, вы можете сделать следующее:

Dim Itm As New Button
Itm.Name = "Itm" & i
Itm.Height = 62
Itm.Width = 159
Itm.Text = Temp(i, 0).ToUpper
Itm.Left = (F * 165)
Itm.Visible = True
Itm.BackColor = Colour
Itm.ForeColor = Color.Black
AddHandler Itm.Click, AddressOf Me.Itm1_Click
Me.pnlItemButton1.Controls.Add(Itm)

Затем установите защищенный обработчик событий:

Protected Sub Itm1_click(ByVal sender As System.Object, ByVal e As System.EventArgs)    
End Sub
person DieVeenman    schedule 14.10.2015
comment
Но использование этой добавленной строки является жестким кодированием Itm1, когда имя Itm находится в цикле с Itm и i, поэтому не всегда будет Itm1? - person James.Net; 14.10.2015
comment
Каждая добавленная кнопка будет иметь один и тот же EventHandler, в Vb.net нет другого способа динамически добавить EventHandler к кнопке, кроме этого, также он не жестко закодирован, единственная жестко запрограммированная часть - это ваш itm1_click - person DieVeenman; 14.10.2015