Единственный способ, которым я могу придумать, - это использовать Reflection для перечисления всех событий и подключения общего обработчика, который будет представлять собой PITA.
Проблема с событиями Framework? Если так, то Microsoft неплохо справляется с заданием порядка жизненного цикла / порядка вызовов.
Редактировать
Итак, вот процедура захвата глобального события:
Private Sub WireAllEvents(ByVal obj As Object)
'Grab all of the events for the supplied object
Dim Events = obj.GetType().GetEvents()
'This points to the method that we want to invoke each time
Dim HandlerMethod = Me.GetType().GetMethod("GlobalHandler")
'Loop through all of the events
For Each ev In Events
'Wire in a handler for the event
ev.AddEventHandler(obj, [Delegate].CreateDelegate(ev.EventHandlerType, Me, HandlerMethod))
Next
End Sub
Public Sub GlobalHandler(ByVal sender As Object, ByVal e As EventArgs)
'Probably want to do something more meaningful here than just tracing
Trace.WriteLine(e)
End Sub
Чтобы подключить его, просто позвоните WireAllEvents(Me.DataGridView1)
, предоставив ваш объект. Почти все события MS используют формат sender / e (включая DataGridView), но если по какой-то причине это не так, я думаю, что этот код выдаст ошибку. Но я только что протестировал его с DataGridView и Form, и он работал как положено.