首页 > 解决方案 > 点击时识别按钮?

问题描述

所以这就是我所拥有的:

当您单击“新建按钮”(Button1) 按钮时生成按钮的代码。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ActionsMade = ActionsMade + 1

        Dim actionButton = New Windows.Forms.Button
        ActionContainer.Controls.Add(actionButton)
        actionButton.Text = "New Action " + ActionsMade.ToString
        actionButton.Width = 107
        actionButton.Height = 56

        AddHandler actionButton.Click, AddressOf OnActionButtonClick
    End Sub

当您单击创建的按钮时,它会显示一个输入框,您可以在其中键入要将按钮重命名为的内容。

Sub OnActionButtonClick()
    If IsRenaming Then
        Dim renameTo As String
        renameTo = InputBox("Rename ActionButton To:")
    Else
        MessageBox.Show("Action started! Not renaming")
    End If
End Sub

唯一的问题是,我无法识别这些按钮。

tl;博士:

标签: vb.net

解决方案


这更简洁,包括一个可引用的按钮名称(例如Button_03):

Private Sub MakeButton_Click(sender As Object, e As EventArgs) Handles MakeButton.Click

    Static ActionsMade As Integer = 0
    ActionsMade += 1
    ActionContainer.Controls.Add(New Button With {
        .Name = $"Button_{ActionsMade:00}",
        .Text = $"New Action {ActionsMade:00}",
        .Size = New Size(107, 56),
        .Location = New Point(100, 250 + 25 * ActionsMade)
    })
    AddHandler ActionContainer.Controls($"Button_{ActionsMade:00}").Click, AddressOf OnActionButtonClick
End Sub

请注意,在上面的代码中,我实际上并没有定义一个新按钮本身,只是在语句中对其进行了New-edControls.Add(),然后使用生成的按钮名称来添加事件处理程序。

另一种方法是将按钮声明为独立对象,然后添加它:

Dim actionButton As New Button With {
    .Name = $"Button_{ActionsMade:00}",
    .Text = $"New Action {ActionsMade:00}",
    .Size = New Size(107, 56),
    .Location = New Point(100, 250 + 25 * ActionsMade)
}
ActionContainer.Controls.Add(actionButton)
AddHandler actionButton.Click, AddressOf OnActionButtonClick

其他注意事项:

  1. 使用Static ActionsMade在调用之间保留其值的整数变量。这也可以是模块范围的变量,并从MakeButton_ClickSub.xml 中删除。

  2. 在根据值的格式化版本分配按钮Name和属性时使用字符串插值。TextActionsMade

  3. 使用按钮属性SizeLocation.

  4. 根据 的值自动增加按钮垂直位置ActionsMade

关于您的 Action Button 事件处理程序,它应该如下所示:

Private Sub OnActionButtonClick(sender As Object, e As EventArgs)

    If ActionStarted Then
        MessageBox.Show("Action started! Not renaming.")
    Else
        CType(sender, Button).Text = InputBox("Rename ActionButton To:")
    End If
End Sub

请注意,我已经检查了已启动的操作,而不是正在进行的重命名,但这只是替代方法的说明。另请注意,您无需知道按钮的名称即可更改其属性。


推荐阅读