且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

将事件作为参数传递

更新时间:2023-10-16 22:02:28

你可以使用反射。



You can use reflection.

Imports System.Reflection

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        Me.setHandler("Click", CType(AddressOf test, EventHandler), Me.Button1)
        Me.setHandler("Click", CType(AddressOf test, EventHandler), Me.Button1)
        Me.setHandler("Click", CType(AddressOf test, EventHandler), Me.Button1)
    End Sub

    Sub setHandler(eventName As String, handler As [Delegate], o As Object)
        Dim eInfo As EventInfo = o.GetType.GetEvent(eventName, BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.IgnoreCase)
        eInfo.RemoveEventHandler(o, handler)
        eInfo.AddEventHandler(o, handler)
    End Sub

    Sub test(sender As Object, e As EventArgs)
        MsgBox("Ok")
    End Sub

End Class


此代码没有用处:

There is no use for this code:
Private Sub setHandler(evt As Event, hndler As eventhandler)
RemoveHandler evt, hndler
AddHandler evt, hndler
End Sub





您删除然后添加相同的处理程序。这样做没用。它与此代码有些相同:





You remove and then add the same handler. It's useless to do this. It's somewhat the same as this code:

temp = a
a = 100
a = temp





也许解释一下你想要达到的目标,这样我就可以给你一个解决方案:-D



祝你好运!



Maybe explain what you want to achieve so I can maybe give you a solution for that :-D

Good luck!