我需要将事件作为参数传递给一个函数,有什么方法可以做到这一点吗?
我的程序中到处都是以下两行代码的序列,其中我动态地删除事件的处理程序,然后再次设置处理程序。我针对几个不同的事件和事件处理程序执行此操作,因此我决定编写一个函数来完成此操作。
例如,假设我的代码中有一个名为combobox1的组合框,以及一个名为indexChangedHandler的处理程序。在我的代码的多个位置,我都有以下两行:
RemoveHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
AddHandler combobox1.SelectedIndexChanged, AddressOf indexChangedHandler
现在,我不想在我的程序中一遍又一遍地重复上述两行代码(或类似的代码),所以我正在寻找一种方法来实现这个目标:
Private Sub setHandler(evt As Event, hndler As eventhandler)
RemoveHandler evt, hndler
AddHandler evt, hndler
End Sub
这样,在我程序中出现那两行代码(或类似代码)的所有位置,我都可以用以下代码进行替换:
setHandler(combobox1.SelectedIndexChanged, AddressOf indexChangedHandler)
目前,setHandler函数参数中"evt as Event"部分会引发错误。
附注:我在其他论坛上提出了这个问题,并且一直被问为什么要立即在移除处理程序后设置处理程序。原因是动态添加事件处理程序n次将导致事件发生时执行n次处理程序。 为了避免这种情况,也就是确保在事件发生时只执行一次处理程序,我首先每次想要动态添加处理程序时都会先删除处理程序。
您可能会问为什么首先会多次添加处理程序...原因是我只有在表单中特定事件E1发生之后(我在事件E1的处理程序内添加处理程序)才会添加处理程序。事件E1可以在我的表单中多次发生。如果我在再次添加处理程序之前不删除处理程序,则处理程序会被多次添加并因此执行多次。
总之,在此时,对于函数中发生的处理并不是最重要的,而是通过参数传递事件的方式。