Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 3
0
        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);
        }