【问题标题】:Dynamic UserControl AddHandler动态用户控件 AddHandler
【发布时间】:2013-10-25 08:10:33
【问题描述】:

我试图了解为什么我的 AddHandler 不起作用。

如果按钮总是在同一个表单上,但将来可能不会,我找到了一种解决方法。

我也在创建这些按钮,以便我可以添加几个变量供以后使用

请给我一个简单的答案?

谢谢 标记

表格

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

【问题讨论】:

  • "为什么我的 AddHandler 不工作你有异常吗?

标签: vb.net addhandler


【解决方案1】:

您的“按钮”不继承自 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

【讨论】:

  • @MarkCooney:我已经编辑了我的答案。但是我不确定你为什么会得到例外。尝试删除位置代码。
  • 我已将您的示例代码添加到项目中,但继承按钮导致以下错误 1 ​​为类 'item_button' 指定的基类 'System.Windows.Forms.Button' 不能与基类不同其他部分类型之一的“System.Windows.Forms.UserControl”类。 C:\Users\Mark\AppData\Local\Temporary Projects\CashRegister\item_button.vb 2 14 CashRegister
  • 蒂姆,我没有遇到异常,只是没有触发
【解决方案2】:

排序

Private Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click
    RaiseEvent ButtonClicked(Me, btnID)
End Sub

感谢蒂姆,您的代码提供了帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2017-01-06
    相关资源
    最近更新 更多