Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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,让我进一步解释。假设我在一个表单上有20个按钮,在所有按钮的点击事件中,我想调用一个特定的函数,而不是在每个点击事件中调用该函数,有没有一种方法可以从任何点击事件中调用它,而不必在每个点击事件中放置代码 希望这是有意义的。是的,只需将每个按钮的单击事件添加到Handles子句的末尾即可 Private Sub My_Sub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Butt

让我进一步解释。假设我在一个表单上有20个按钮,在所有按钮的点击事件中,我想调用一个特定的函数,而不是在每个点击事件中调用该函数,有没有一种方法可以从任何点击事件中调用它,而不必在每个点击事件中放置代码


希望这是有意义的。

是的,只需将每个按钮的单击事件添加到
Handles
子句的末尾即可

Private Sub My_Sub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
    ' do stuff
End Sub

将一个子按钮关联到每个按钮的单击事件

Private Sub AnyButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click

End Sub

如果有很多按钮或按钮的动态数量,可以使用递归方法为每个按钮添加相同的事件处理程序。这将处理所有按钮,甚至是分组框或其他容器中的按钮

首先,创建希望每个按钮单击调用的方法

Private Sub bt_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
  '
  ' Your code goes here
  '
End Sub
其次,创建一个递归查找所有按钮控件的方法,并添加事件处理程序

Private Sub AddEventHandler(RootControl As Control)
  For Each c As Control In RootControl
    If c.HasChildren Then
      AddEventHandler(c)
    End If
    If TypeOf c Is Button Then
      AddHandler c.Click, AddressOf bt_ButtonClick
    End If
  Next
End Sub
最后,在表单加载事件中,添加以下行:

AddEventHandler(Me)

那么,当单击任何按钮时,是否会自动生成此项?当单击按钮时是否会创建子项?否。您创建了它,但按钮会触发事件,运行您在子项中输入的任何代码。如果WinForms:在IDE中选择您正在使用的所有按钮,然后添加单击事件。如果任何按钮已经有一个点击事件,它也会触发。不保证射击顺序。(你接受的答案(蓝狗)的变体,避免了大量的打字。)