Динамический UserControl AddHandler
Я пытаюсь понять, почему мой AddHandler не работает.
Я нашел обходной путь, если кнопки всегда имеют одинаковую форму, но они могут отсутствовать в будущем.
Я также создаю эти кнопки, чтобы я мог добавить несколько переменных для последующего использования
У любого есть простой ответ для меня, пожалуйста?
Спасибо Марк
FORM
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For n = 0 To 3
Dim ctl As New item_button
AddHandler ctl.Click, AddressOf Me.ClickMe
ctl.Name = "btn" & n
ctl.btn.Text = "Button " & n
ctl.btnID = n
ctl.Location = New Point(10, n * 50)
Me.Controls.Add(ctl)
Next
End Sub
Public Sub ClickMe(ByVal s As Object, ByVal e As EventArgs)
'do something
Dim btn As item_button
btn = CType(s, item_button)
TextBox1.Text = "Button " & s.btnID & " was pressed"
End Sub
End Class
ITEM_BUTTON
Public Class item_button
Public btnID As Integer
Public btnColor As System.Drawing.Color
Public Function ClickIt() As Integer
Return btnID
End Function
End Class
2 ответа
Ваша "кнопка" не наследуется от Button
:
Public Class ItemButton ' Naming-Conventions: http://msdn.microsoft.com/en-us/library/ms229040(v=vs.110).aspx
Inherits Button
Public Property BtnID As Integer
Public Property BtnColor As System.Drawing.Color
Public Function ClickIt() As Integer
Return btnID
End Function
End Class
Поскольку я не уверен, чего вы на самом деле пытаетесь достичь, я покажу вам пример с пользовательским событием, которое вызывается в пользовательской кнопке и обрабатывается в форме:
Public Class ItemButton
Inherits Button
Public Property BtnID As Integer
Public Property BtnColor As System.Drawing.Color
Public Event ButtonClicked(sender As ItemButton, buttonID As Int32)
Private Sub clicked(sender As Object, e As EventArgs) Handles Me.Click
RaiseEvent ButtonClicked(Me, BtnID)
End Sub
End Class
в виде:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For n = 0 To 3
Dim ctl As New ItemButton
AddHandler ctl.ButtonClicked, AddressOf Me.ItemButtonClicked
ctl.Name = "btn" & n
ctl.Name = "Button " & n.ToString()
ctl.btnID = n
ctl.Location = New Point(10, n * 50)
Me.Controls.Add(ctl)
Next
End Sub
Public Sub ItemButtonClicked(ByVal btn As ItemButton, ByVal buttonID As Int32)
TextBox1.Text = "Button " & buttonID & " was pressed"
End Sub
Отсортированный
Private Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click
RaiseEvent ButtonClicked(Me, btnID)
End Sub
Спасибо Тим, твой код помог