在VB.net窗体中,我有20个按钮。它们是从btnLoc1〜btnLoc20命名的。我不想编码每个按钮点击事件。循环按钮来检查哪个被点击
如何遍历每个按钮来检查哪个被点击?
我是否需要实现计时器滴答声来听按钮点击事件?
在VB.net窗体中,我有20个按钮。它们是从btnLoc1〜btnLoc20命名的。我不想编码每个按钮点击事件。循环按钮来检查哪个被点击
如何遍历每个按钮来检查哪个被点击?
我是否需要实现计时器滴答声来听按钮点击事件?
如果按钮被点击时发现 - eventhandler是最好的选择。
但是你可以为所有的按钮
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
您可以为所有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
的项目。有很多方法可以做到这一点。一种是将数据放在Button
本身的Tag
属性中,并从那里检索它。另一个是使用并发索引,例如
Dim buttons = Controls.OfType(Of Button)().ToArray()
Dim data = {"First", "Second", "Third"}
MessageBox.Show(data(buttons.IndexOf(btn)))
显然你需要确保Button
阵列和数据阵列排队。
如果每个按钮都有自己的逻辑 - 每个按钮的自己的处理程序都是更清晰且更容易维护的出价,那么“索引“,”映射“方法 – Fabio
@Fabio,是的,我已经在我的回答中说过,如果您想为每个”按钮“做不同的事情,应该使用单独的事件处理程序。尽管我的第二个代码片段没有为每个“Button”演示不同的逻辑。它为每个'Button'演示不同的数据,所有的逻辑都是相同的。在这种情况下,使用并发数组是一种优越的方法,因为它遵循DRY原则。 – jmcilhinney
_我不想编码每个按钮单击event_ - 你需要。您可以为所有按钮创建一个按钮单击事件处理程序 – Fabio
Private Sub Buttons_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button1.Click,Button2.Click,_ Button3.Click,Button4.Click,Button5.Click, Button6.Click,Button7.Click,Button8.Click'等等...... End Sub –