internal void ExecuteEvents(string path, params string[] eventNames)
        {
            var controlPath = new ControlPathModel(path);
            var control     = accessFormControlsTreeWalker.GetAccessControlByPath(application, controlPath);

            var formName = controlPath.FormName;
            var form     = new AccessFormModel(application.Forms[formName], false, false, false);

            foreach (var eventName in eventNames)
            {
                if (ExecuteHandlerCode(form, control, eventName))
                {
                    return;
                }
            }

            throw new Exception("No action to execute found");
        }
示例#2
0
        public AccessControlModel GetAccessControlByPath(Application application, ControlPathModel controlPath)
        {
            var form = application.Forms[controlPath.FormName];

            _Control controlFound = null;

            var controls = form.Controls.OfType <_Control>().ToList();

            for (var i = 0; i < controlPath.Count; i++)
            {
                var pathElement = controlPath[i];
                controlFound = GetMatchingControl(controls, controlPath[i]);

                if (i == controlPath.Count - 1)
                {
                    break; // don't load children of last element of path, it's probably not a container and wil throw a COM exception
                }
                controls = controlFound.Controls.OfType <_Control>().ToList();
            }

            return(new AccessControlModel(controlFound, true, false));
        }