Этот код получит обработчики событий для элемента управления
Private Function getEventHandlers(ctrl As Control) As System.ComponentModel.EventHandlerList
Dim value As System.ComponentModel.EventHandlerList = Nothing
Try
Dim propInfo As System.Reflection.PropertyInfo = GetType(Control).GetProperty("Events", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Static)
If propInfo IsNot Nothing Then value = CType(propInfo.GetValue(ctrl), System.ComponentModel.EventHandlerList)
Catch ex As Exception
End Try
Return value
End Function
У меня были проблемы с добавлением обработчиков событий более одного раза, что приводило к нескольким вызванным событиям. Следующее позволит вам проверить, есть ли у элемента управления обработчик для указанного события.
Private Function hasEventHandler(ctrl As Control, Optional eventName As String = "Click") As Boolean
Dim value As Boolean = False
Try
Dim handlerList As System.ComponentModel.EventHandlerList = getEventHandlers(ctrl)
Dim controlEventInfo As System.Reflection.FieldInfo = GetType(Control).GetField("Event" + eventName, Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Static)
If controlEventInfo IsNot Nothing Then
Dim eventKey As Object = controlEventInfo.GetValue(ctrl)
Dim EventHandlerDelegate As [Delegate] = handlerList.Item(eventKey)
If EventHandlerDelegate IsNot Nothing Then value = True
End If
Catch ex As Exception
End Try
Return value
End Function