首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态UserControl AddHandler

动态UserControl AddHandler
EN

Stack Overflow用户
提问于 2013-10-25 16:10:34
回答 2查看 1.9K关注 0票数 0

我想知道为什么我的AddHandler不能工作。

我已经找到了一个解决方法,如果按钮总是在相同的表单上,但它们可能不会在未来。

我还创建了这些按钮,这样我就可以添加几个变量供以后使用

有人能给我一个简单的答案吗?

谢谢,马克

表格

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2013-10-25 16:16:11

您的按钮不是从Button继承的

代码语言:javascript
复制
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

由于我不确定您实际上想要实现的目标,因此我将向您展示一个示例,其中包含一个在自定义按钮中引发并在表单中处理的自定义事件:

代码语言:javascript
复制
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

在表单中:

代码语言:javascript
复制
 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
票数 1
EN

Stack Overflow用户

发布于 2013-10-25 16:49:29

已排序

代码语言:javascript
复制
Private Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click
    RaiseEvent ButtonClicked(Me, btnID)
End Sub

谢谢Tim,你的代码帮了我大忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19584483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档