Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 循环按钮以检查单击了哪个_Vb.net - Fatal编程技术网

Vb.net 循环按钮以检查单击了哪个

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

在VB.net表单中,我有20个按钮。它们是根据btnLoc1~btnLoc20命名的。我不想对每个按钮单击事件进行编码

  • 如何循环每个按钮以检查单击了哪个按钮

  • 我是否需要实现定时器滴答来监听按钮点击事件


  • 为了在点击按钮时引起注意,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原则。