VB.NET - 如何将大量事件添加到单个句柄?

标签 vb.net winforms events

最近一直在做一个程序,里面有几个TextBoxes、CheckBoxes、ComboBoxes等,我发现让一个函数处理多个事件非常简单,你只需要用逗号分隔事件,代码就能识别出单个事件事件。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click, Button2.Click
    MsgBox("Hello World!")
End Sub

但是,当您开始拥有大量要由同一函数处理的事件时,它会变得有些困惑。
Private Sub Checks_CheckedChanged(sender As Object, e As EventArgs) Handles chkInput1.CheckedChanged, chkInput2.CheckedChanged, chkInput3.CheckedChanged, chkInput4.CheckedChanged, checkInput5.CheckedChanged, chkOutput.CheckedChanged
    MsgBox("Checks Changed!")
End Sub

您可以使用换行符 _让它看起来好一点。
Private Sub Checks_CheckedChanged(sender As Object, e As EventArgs) Handles _
chkInput1.CheckedChanged, chkInput2.CheckedChanged, chkInput3.CheckedChanged, _
chkInput4.CheckedChanged, checkInput5.CheckedChanged, chkOutput.CheckedChanged
    MsgBox("Checks Changed!")
End Sub

但是你仍然会得到一个令人讨厌的文本块。有没有更干净/简洁的方法来做到这一点?我的想法是,将一组对象事件作为参数提供真的很好,但我认为这是不可能的。

最佳答案

您可以通过使用

AddHandler ObjectName.EventName, AddressOf EventHandlerName

句法

编写一个接受一个对象数组并循环它们以添加每个事件的处理程序的 Sub 非常简单。

对于复选框:
Public Sub AddHandlerSub(PassedArray As CheckBox())
    For Each item As CheckBox in PassedArray
        AddHandler Item.CheckedChanged, AddressOf EventHandlerName
    next
End Sub

关于VB.NET - 如何将大量事件添加到单个句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55850862/

相关文章:

.net - 多线程列表中的SyncLock仍然抛出ArgumentException

python - 发送到 Citrix 应用程序时在 Python 脚本中模拟硬件按键(SendKeys 不起作用)

c# - 如何在 ASP.NET 中处理 KeyPress 或 KeyDown 事件?

c# - ASP.NET 和 JavaScript 错误

vb.net - VB.NET 的 lambda 语法和地址之间的区别

c++ - .NET c++ 中父级的子窗体调用函数

winforms - 获取 parent 姓名

c# - 如何旋转图片框中的图片

javascript - Android + jQuery - swipeleft 上的第二个不会执行

javascript - 如何检测 iFrame 何时进入全屏?