Динамический 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

Спасибо Тим, твой код помог

Другие вопросы по тегам