.net - 如何使单个事件处理程序处理ALL Button.Click事件?

标签 .net vb.net events button event-handling

在我的程序中,我有9个按钮,并且每个按钮都有9个单独的事件处理程序,尽管每个事件处理程序中的代码都是相同的。事实证明,更改所有代码都非常繁琐。是否可以使单个Button.Click事件处理程序处理我所有按钮的Button.Click事件?

最佳答案

您可以修改VS生成的事件代码上的Handles子句,以便它可以为多个控件处理同一事件。在大多数情况下,某人可能希望将大多数(但不是全部)按钮单击集中到一个过程。更改Handles子句:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button1.Click, 
                 Button3.Click, Button4.Click ...
    ' just add the extra clicks for the additional ones

    ' you will need to examine "Sender" to determine which was clicked

    ' your code here
End Sub

这也可以动态完成,例如对于在Load事件(或任何地方)中创建并添加到表单的控件:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AddHandler Button1.Click, AddressOf AllButtonsClick
    AddHandler Button2.Click, AddressOf AllButtonsClick
    AddHandler Button3.Click, AddressOf AllButtonsClick

End Sub

要将所有按钮合理地连接到同一事件,可以遍历控件集合(使用Linq):
For Each b As Button In XXXXX.Controls.OfType(Of Button)
     AddHandler b.Click, AddressOf MyClickHandler
Next
XXXXX可能是Me或面板,groupbox等的地方-无论按钮在哪里。

关于.net - 如何使单个事件处理程序处理ALL Button.Click事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022728/

相关文章:

.net - 无需 Outlook 或 System.Net.Mail 即可发送电子邮件

vb.net - 局部变量 : Pascal or Camel Casing?

javascript - 检测div何时为 "unloaded"

.net - 在不移动鼠标的情况下将鼠标点击发送到特定位置

php - Laravel/Lumen 事件监听器不监听

.net - 您可以使用 MEF 水合静态属性吗?

.net - Azure Blob 存储-container.GetBlobsByHierarchyAsync-不返回结果

.net - 通过 SDK 将项目添加到 TFS 中的全局列表

ASP.NET/VB.NET : Iterate through multiline textbox

java - 数据库中的循环与应用程序中的循环