You can do this with reflection. Here's how. Create a form with a textbox called TextBox1
. Paste the following code. Run the project and look at the immediate window.
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
This is from Francesco Balena's book Programming Microsoft Visual Basic 2005 The Language. The techique works with any object that raises events, not just controls. It uses contravariance.
If you buy the book, there's a full explanation and some more code which will allow you to identify which event has fired in the universal handler, and use regular expressions to handle only a subset of events. I don't feel I can post such a long excerpt here.