/// <summary> /// Add or remove the provided handler /// </summary> /// <typeparam name="TEventArgs">The type of the handler</typeparam> /// <param name="addHandler">true to add an event listener, false to remove one</param> /// <param name="key">The key to the current handler</param> /// <param name="handler">The event to add or remove</param> /// <returns>Returns non-null if the wrapper needs to be added or removed</returns> private Delegate AddOrRemove <TEventArgs>(TypeAndDomainObjectKey key, EventHandler <TEventArgs> handler, bool addHandler) where TEventArgs : ModelingEventArgs { Delegate retVal = null; EventHandlerWrapper currentWrapper = null; if (myDictionary.TryGetValue(key, out currentWrapper)) { if (addHandler) { currentWrapper.InnerHandler = MulticastDelegate.Combine(currentWrapper.InnerHandler, handler); } else { Delegate newDelegate = MulticastDelegate.Remove(currentWrapper.InnerHandler, handler); currentWrapper.InnerHandler = newDelegate; if (newDelegate == null) { myDictionary.Remove(key); retVal = new EventHandler <TEventArgs>(((EventHandlerWrapper <TEventArgs>)currentWrapper).Handler); } } } else { EventHandlerWrapper <TEventArgs> wrappedHandler = new EventHandlerWrapper <TEventArgs>(handler, this); myDictionary.Add(key, wrappedHandler); retVal = new EventHandler <TEventArgs>(wrappedHandler.Handler); } return(retVal); }
public Button CreateButton(string text) { EventHandlerWrapper e = new EventHandlerWrapper(); Button btn = new Button(); btn.Text = text; btn.Click += e.button_Click; }
internal void HookupControlEvent(Control control, string eventName, string handlerName, int line) { EventInfo eventInfo = control.GetType().GetEvent(eventName); if (eventInfo == null) { throw new Exception("Control '" + control.ID + "' doesn't have an event named '" + eventName + "'"); } object o = null; if (_scopeDictionary == null || !_scopeDictionary.TryGetValue(handlerName, out o)) { Misc.ThrowException("The page doesn't have an event handler named '" + handlerName + "'", null, _templateControl.AppRelativeVirtualPath, line); } DynamicFunction handlerFunction = new DynamicFunction(o); Delegate handler = EventHandlerWrapper.GetWrapper(this, handlerFunction, _scriptVirtualPath, eventInfo.EventHandlerType); eventInfo.AddEventHandler(control, handler); }