Vb.net 循环按钮以检查单击了哪个
在VB.net表单中,我有20个按钮。它们是根据btnLoc1~btnLoc20命名的。我不想对每个按钮单击事件进行编码Vb.net 循环按钮以检查单击了哪个,vb.net,Vb.net,在VB.net表单中,我有20个按钮。它们是根据btnLoc1~btnLoc20命名的。我不想对每个按钮单击事件进行编码 如何循环每个按钮以检查单击了哪个按钮 我是否需要实现定时器滴答来监听按钮点击事件 为了在点击按钮时引起注意,eventhandler是最佳选择。 但您只能为所有按钮创建一个eventhandler Private Sub Button_Click(sender As Object, e As EventArgs) Dim button As Button = Dire
为了在点击按钮时引起注意,eventhandler是最佳选择。
但您只能为所有按钮创建一个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
如果您想获得关于每个按钮被点击多少的信息,只需创建字典并在一个eventhandler中添加点击量
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
为了在点击按钮时引起注意,eventhandler是最佳选择。
但您只能为所有按钮创建一个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
如果您想获得关于每个按钮被点击多少的信息,只需创建字典并在一个eventhandler中添加点击量
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
您可以为所有
按钮创建单个事件处理程序。选择设计器中的所有按钮,打开属性窗口,单击事件按钮,然后双击单击事件。这将生成一个单击
事件处理程序,就像在设计器中双击一个按钮
一样,只是这一个在句柄
子句中有多个项。然后,您可以使用发送者
参数访问单击的按钮
,例如
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
接下来的问题是,你想用按钮做什么?如果您想对每个按钮执行不同的操作,那么您确实应该创建单独的事件处理程序。或者,您可能有一个数据列表,并且希望使用该列表中与单击的按钮相对应的项。有很多方法可以做到这一点。一种是将数据放入按钮本身的标记属性中,并从中检索数据。另一种是使用并发索引,例如
Dim buttons = Controls.OfType(Of Button)().ToArray()
Dim data = {"First", "Second", "Third"}
MessageBox.Show(data(buttons.IndexOf(btn)))
显然,您需要确保按钮
数组和数据数组对齐。您可以为所有按钮
创建单个事件处理程序。选择设计器中的所有按钮,打开属性窗口,单击事件按钮,然后双击单击事件。这将生成一个单击
事件处理程序,就像在设计器中双击一个按钮
一样,只是这一个在句柄
子句中有多个项。然后,您可以使用发送者
参数访问单击的按钮
,例如
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
接下来的问题是,你想用按钮做什么?如果您想对每个按钮执行不同的操作,那么您确实应该创建单独的事件处理程序。或者,您可能有一个数据列表,并且希望使用该列表中与单击的按钮相对应的项。有很多方法可以做到这一点。一种是将数据放入按钮本身的标记属性中,并从中检索数据。另一种是使用并发索引,例如
Dim buttons = Controls.OfType(Of Button)().ToArray()
Dim data = {"First", "Second", "Third"}
MessageBox.Show(data(buttons.IndexOf(btn)))
显然,您需要确保按钮
数组和数据数组对齐。我不想对每个按钮单击事件进行编码-您需要这样做。您可以为所有按钮创建一个按钮单击事件处理程序私有子按钮单击(ByVal sender作为对象,ByVal e作为System.EventArgs)处理按钮1.单击,按钮2.单击,按钮3.单击,按钮4.单击,按钮5.单击,按钮6.单击,按钮7.单击,按钮8.单击等等。。。End SubI不想对每个按钮单击事件进行编码-您需要这样做。您可以为所有按钮创建一个按钮单击事件处理程序私有子按钮单击(ByVal sender作为对象,ByVal e作为System.EventArgs)处理按钮1.单击,按钮2.单击,按钮3.单击,按钮4.单击,按钮5.单击,按钮6.单击,按钮7.单击,按钮8.单击等等。。。如果每个按钮都有自己的逻辑,每个按钮都有自己的处理程序,这样更清晰,更容易维护,那么“索引”,“映射”approach@Fabio,是的,我在回答中已经说过,当您希望为每个按钮执行不同的操作时,应该使用单独的事件处理程序。不过,我的第二个代码片段并没有为每个按钮演示不同的逻辑。它为每个按钮演示了不同的数据,所有按钮的逻辑都相同。在这种情况下,使用并发数组是一种优越的方法,因为它遵循DRY原则。如果每个按钮都有自己的逻辑,那么每个按钮都有自己的处理程序,这样更清晰,更易于维护,那么“索引”、“映射”approach@Fabio对我在回答中已经说过,当您想为每个按钮执行不同的操作时,应该使用单独的事件处理程序。不过,我的第二个代码片段并没有为每个按钮演示不同的逻辑。它为每个按钮演示了不同的数据,所有按钮的逻辑都相同。在这种情况下,使用并发数组是一种更好的方法,因为它遵循DRY原则。