【问题标题】:Button Handles after creating buttons in code在代码中创建按钮后的按钮句柄
【发布时间】:2016-01-12 06:47:07
【问题描述】:

我之前在我的代码中创建了按钮,如图:

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

但是得到一个错误,'handle clause requires with WithEvent'

那么我该怎么做 ?

另外,按钮的数量 - Itm(i) 是可变的,那么我如何创建一个处理 Itm1 到 Itm99 的句柄?

【问题讨论】:

标签: vb.net events button handles


【解决方案1】:

当您定义一个动态添加的按钮时,它在运行时不存在,因此您无法设置这样的事件处理程序,您可以执行以下操作:

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

【讨论】:

  • 但是使用添加的那一行,是硬编码 Itm1,当 Itm 名称与 Itm & i 循环时,不会总是 Itm1?
  • 每个添加的按钮都会有相同的 EventHandler,除此之外在 Vb.net 中没有其他方法可以动态地将 EventHandler 添加到按钮,它也不是硬编码的,唯一硬编码的部分是你的itm1_click
【解决方案2】:

对于您的第一个错误,请查看this。它可能会帮助你。

要为您动态创建的每个按钮创建单击事件,请尝试以下操作:

AddHandler Itm.Click, AddressOf Me.Itm1_Click

那么您的 Sub 中不需要 Handles Itm1.click

Private Sub Itm1_click(ByVal sender As System.Object,ByVal e As System.EventArgs)   
       'Do stuff
End Sub

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多