在VB.net表单中,我有20个按钮。它们以btnLoc1~btnLoc20命名。我不想编写每个按钮单击事件。
如何遍历每个按钮以检查点击的内容?
我是否需要实现计时器勾选才能听取按钮点击事件?
答案 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