Вы можете сделать это с отражением . Вот как. Создайте форму с текстовым полем с именем TextBox1
. Вставьте следующий код. Запустите проект и посмотрите на ближайшее окно.
Public Class Form1
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
RegisterAllEvents(TextBox1, "MyEventHandler")
End Sub
Sub MyEventHandler(ByVal sender As Object, ByVal e As EventArgs)
Debug.WriteLine("An event has fired: sender= " & sender.ToString & ", e=" & e.ToString)
End Sub
Sub RegisterAllEvents(ByVal obj As Object, ByVal methodName As String)
'List all events through reflection'
For Each ei As System.Reflection.EventInfo In obj.GetType().GetEvents()
Dim handlerType As Type = ei.EventHandlerType
Dim method As System.Reflection.MethodInfo = Me.GetType().GetMethod(methodName)
'Create a delegate pointing to the method'
Dim handler As [Delegate] = [Delegate].CreateDelegate(handlerType, Me, method)
'Register the event through reflection'
ei.AddEventHandler(obj, handler)
Next
End Sub
End Class
Это из книги Франческо Балены Программирование на языке Microsoft Visual Basic 2005 The Language . Техника работает с любым объектом, который вызывает события, а не только с элементами управления. Используется контравариантность .
Если вы купите книгу , есть полное объяснение и еще один код, который позволит вам определить, какое событие произошло в универсальном обработчике, и использовать регулярные выражения для обработки только подмножества событий. Я не чувствую, что могу выложить здесь такой длинный отрывок.