我需要将一个事件作为参数传递给一个函数.有办法做到这一点吗?
原因是我有两行代码的序列遍布我的程序,在那里我动态地删除事件的处理程序,然后再次设置处理程序.我正在为几个不同的事件和事件处理程序执行此操作,因此我决定编写一个执行此操作的函数.
举个例子,假设我的代码中有一个名为combobox1的组合框,我有一个名为indexChangedHandler的处理程序.在我的代码的几个地方,我有以下两行:
RemoveHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
AddHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
Run Code Online (Sandbox Code Playgroud)
现在,我不想继续在我的程序中重复上面两行代码(或类似代码),所以我正在寻找一种方法来执行此操作:
Private Sub setHandler(evt As Event, hndler As eventhandler)
RemoveHandler evt, hndler
AddHandler evt, hndler
End Sub
Run Code Online (Sandbox Code Playgroud)
所以在我的程序中出现这两行代码(或类似代码)的地方,我可以用以下代码替换它们:
setHandler(combobox1.SelectedIndexChanged, AddressOf indexChangedHandler)
Run Code Online (Sandbox Code Playgroud)
到目前为止,setHandler函数参数的"evt as Event"部分给出了一个错误.
PS:我在其他几个论坛上问过这个问题并不断被问到为什么我想在删除后立即设置处理程序.原因是因为动态添加事件处理程序n次会导致处理程序在事件发生时执行n次.为了避免这种情况,也就是说,为了确保在事件发生时只执行一次处理程序,我每次要动态添加处理程序时首先删除处理程序.
您可能会问为什么处理程序会首先添加几次...原因是因为我在我的表单中发生了特定事件(例如E1)之后才添加处理程序(我在处理程序中添加了处理程序)事件E1).事件E1可以在我的表单中多次出现.如果我在每次再添加之前都不删除处理程序,则会添加处理程序并因此执行多次.
无论如何,此时函数内发生的处理对我来说并不是最重要的,而只是将事件作为参数传递的方法.