循环按钮检查单击了哪个

时间:2016-11-23 04:15:39

标签: vb.net

在VB.net表单中,我有20个按钮。它们以btnLoc1~btnLoc20命名。我不想编写每个按钮单击事件。

  1. 如何遍历每个按钮以检查点击的内容?

  2. 我是否需要实现计时器勾选才能听取按钮点击事件?

2 个答案:

答案 0 :(得分:2)

您可以为所有Buttons创建单个事件处理程序。选择设计器中的所有按钮,打开“属性”窗口,单击“事件”按钮,然后双击Click事件。这将生成一个Click事件处理程序,就像双击设计器中的Button一样,除了这个在Handles子句中有多个项目。然后,您可以使用sender参数访问被点击的Button,例如

Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles Button1.Click,
                                                                    Button2.Click,
                                                                    Button3.Click
    Dim btn = DirectCast(sender, Button)

    'Use btn here.
End Sub

那么问题是,你想用Button做什么?如果你想为每个Button做一些不同的事情,那么你真的应该创建单独的事件处理程序。或者,您可能有一个数据列表,并且您希望使用该列表中与所单击的Button对应的项目。有很多方法可以做到这一点。一种是将数据放在Tag本身的Button属性中,并从那里检索它。另一种方法是使用并发索引,例如

Dim buttons = Controls.OfType(Of Button)().ToArray()
Dim data = {"First", "Second", "Third"}

MessageBox.Show(data(buttons.IndexOf(btn)))

显然你需要确保Button数组和数据数组排成一行。

答案 1 :(得分:1)

如果点击按钮会被注意到 - 事件处理程序是最佳选择 但是,您只能为所有按钮创建一个事件处理程序

Private Sub Button_Click(sender As Object, e As EventArgs)
    Dim button As Button = DirectCast(sender, Button)
    MessageBox($"Button '{button.Name}' was clicked")
End Sub

然后在构造函数

Public Sub New()
    InitializeComponennts()

    AddHandler Button1.Click, AddressOf Me.Button_Click
    AddHandler Button2.Click, AddressOf Me.Button_Click
    AddHandler Button3.Click, AddressOf Me.Button_Click
    ' and so on
End Sub 

如果您想获得有关每个按钮被点击多少的信息,只需创建字典并在一个事件处理程序中添加点击量

Private ButtonsClickAmount As New Dictionary(Of String, Integer)()

Private Sub Button_Click(sender As Object, e As EventArgs)
    Dim button As Button = DirectCast(sender, Button)
    If ButtonsClickAmount.ContainKey(button.Name) = True Then
        ButtonsClickAmount(button.Name) += 1
    Else
        ButtonsClickAmount.Add(button.Name, 1)
    End If
End Sub