To test the behavior of a custom Windows Forms button control I had created, I had to trigger the Click event handler from code. There are multiple ways to achieve this, but I choose to combine a helper class with some convention based reflection.
I created a static class UIHelper with the following method:
1: public static void TriggerEvent(Object targetObject, string eventName, EventArgs e)
2: {
3: String methodName = "On" + eventName;
4:
5: MethodInfo mi = targetObject.GetType().GetMethod(
6: methodName,
7: BindingFlags.Instance | BindingFlags.NonPublic);
8:
9: if (mi == null)
10: throw new ArgumentException("Cannot find event named "+methodName);
11:
12: mi.Invoke(targetObject, new object[] { e });
13: }
In this code I took advantage of the fact that by convention event handlers are internally called by a protected method called On[EventName].
An example: a Click event is triggered by the OnClick method.
The following code will trigger the event:
1: UIHelper.TriggerEvent(btnTest, "Click", EventArgs.Empty());