예제 #1
0
        /// <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]);
            }
        }