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

问题描述:

最近,我正在开发一个包含几个TextBoxes,CheckBoxes,ComboBoxes等的程序,我发现使一个函数处理多个事件非常简单,您只需用逗号和代码分隔事件识别单个事件.

Recently I've been working on a program that has a few TextBoxes, CheckBoxes, ComboBoxes, etc., and I found that making one function handle multiple events is pretty simple, you just separate the events with a comma and the code recognizes the inidvidual events.

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

但是,当您开始具有要由同一功能处理的大量事件时,它会变得有些混乱.

However, when you start to have a large number of events that you want handled by the same function, it gets a bit messy.

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

您可以使用换行字符_使其看起来更好一些.

You can use the line continuation character _ to make it look a little better.

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

但是您仍然会遇到讨厌的文本块.有没有更简洁的方法?我想到的是,将一系列对象事件作为参数确实很不错,但我认为这是不可能的.

But you still end up with a nasty block of text. Is there a more clean/concise way of doing this? What I have in mind is that it would be really nice to give an array of object events as an argument but I don't think that's possible.

您可以使用

AddHandler ObjectName.EventName, AddressOf EventHandlerName

语法

编写一个Sub,它接受一个对象数组并在其上循环以为每个事件添加处理程序,就足够简单了.

It's simple enough to write a Sub that takes an array of object and loops over them to add the handler for each event.

对于复选框:

Public Sub AddHandlerSub(PassedArray As CheckBox())
    For Each item As CheckBox in PassedArray
        AddHandler Item.CheckedChanged, AddressOf EventHandlerName
    next
End Sub