/// <summary> /// Patches the events for a specific treeview. /// </summary> /// <param name="tView">The TreeView.</param> private static void CorrectEventsForTreeView(TreeView tView) { Delegate[] EventDelegates = null; if (EventsPatched.ContainsKey(tView)) throw new InvalidOperationException("Events for this TreeView has been previously patched: '" + tView.Name + "'"); EventsPatched.Add(tView, new Dictionary<string, List<Delegate>>()); foreach (string eventName in EventsToCorrect.Keys) { EventInfo eInfo = tView.GetType().GetEvent(eventName); if (eInfo == null) throw new InvalidOperationException("Event info for event '" + eventName + "' could not be found"); EventsPatched[tView].Add(eventName, new List<Delegate>()); EventDelegates = ContainerHelper.GetEventSubscribers(tView, eventName); if (EventDelegates != null) { foreach (Delegate del in EventDelegates) { EventsPatched[tView][eventName].Add(del); eInfo.RemoveEventHandler(tView, del); } } eInfo.AddEventHandler(tView, EventsToCorrect[eventName]); } }