예제 #1
0
        public static void ZOrderSync(UIElement entity)
        {
            IFormElementEntityDev entityDev = entity as IFormElementEntityDev;

            Debug.Assert(entityDev != null, "实体对象没有实现 IFormElementEntityDev");
            Control control = entityDev.Component as Control;

            Debug.Assert(control != null, "entityDev.Component 不是 Control");
            if (control.Parent == null)
            {
                return;
            }
            Control.ControlCollection controls = control.Parent.Controls;
            IShellControlDev          controlDev;

            foreach (Control c in controls)
            {
                controlDev = c as IShellControlDev;
                Debug.Assert(controlDev != null, "Control 没有实现 IShellControlDev");
                if (controlDev == null)
                {
                    continue;
                }
                ((UIElement)controlDev.Entity).ZOrder = controls.GetChildIndex(c);
            }
        }
예제 #2
0
 public override void Redo(bool action)
 {
     SEUndoUnitZOrderMember[] members = null;
     if (_sendTo == EnumSendTo.Forward)
     {
         var a = from c in this.Members orderby c.NewOrder ascending select c;
         members = a.ToArray();
     }
     else
     {
         var a = from c in this.Members orderby c.NewOrder descending select c;
         members = a.ToArray();
     }
     foreach (SEUndoUnitZOrderMember member in members)
     {
         IFormElementEntityDev entityDev = member.Entity as IFormElementEntityDev;
         Debug.Assert(entityDev != null, "实体对象没有实现 IFormElementEntityDev");
         if (entityDev == null)
         {
             return;
         }
         Control control = entityDev.Component as Control;
         Debug.Assert(control.Parent != null, "control.Parent 为 null");
         control.Parent.Controls.SetChildIndex(control, member.NewOrder);
         Helper.ZOrderSync(member.Entity);
     }
     if (action && Action != null)
     {
         Action(this, SEUndoEngine.Type.Redo);
     }
 }
        /// <summary>
        /// 根据实体对象在窗体根窗口中创建对象
        /// 公开方法是撤销重做引擎需要用到
        /// 需要public出来给撤销重做引擎调用
        /// </summary>
        /// <param name="element"></param>
        public void CreateControl(UIElement element)
        {
            //Control control = ControlFactory.InitControl(element, this._designSurface);

            IFormElementEntityDev entityDev = element as IFormElementEntityDev;

            if (entityDev == null)
            {
                throw new NotImplementedException();
            }

            //TODO:考虑在IDE中继承DesignSurface,并重写CreateControl,在调用基类的CreateControl后,直接把Entity对象放进去
            Control control = this._designSurface.CreateControl(entityDev.DesignerControlType, element.Size, element.Location);

            IShellControlDev shellControlDev = control as IShellControlDev;

            element.HostFormEntity = this._windowEntity;
            shellControlDev.Entity = element;

            Debug.WriteLine("挂上Entity : " + element.GetType().Name);

            shellControlDev.UpdateView();

            //这种情况发生在撤销重做引擎中
            //初始化的时候,element是在formEntity中的,但是在撤销时,肯定不在,已经被移除了
            //if (!_formEntity.Elements.Contains(element))
            //{
            //    _formEntity.Elements.Add(element);
            //}
        }
        /// <summary>
        /// 找到实体对象所关联的组件,将其销毁
        /// 需要public出来给撤销重做引擎调用
        /// </summary>
        /// <param name="element"></param>
        public void DestroyControl(UIElement element)
        {
            IFormElementEntityDev entityDev = element as IFormElementEntityDev;

            if (entityDev == null)
            {
                throw new NotImplementedException();
            }

            this._designSurface.DestroyComponent(entityDev.Component);
        }
        public DataGridViewTextBoxColumnDev(FormElementDataListTextBoxColumnEntityDev entity)
        {
            this._entity    = entity;
            this.Name       = this._entity.Code;
            this.HeaderText = this._entity.Text;
            this.Visible    = this._entity.Visible;
            this.Width      = this._entity.Width;
            IFormElementEntityDev entityDev = entity as IFormElementEntityDev;

            if (entityDev != null)
            {
                entityDev.Component = this;
            }
        }
        /// <summary>
        /// 更新控件,组件的可视状态
        /// </summary>
        /// <param name="entitys"></param>
        public void UpdateView(EntityCollection entitys)
        {
            IComponent[] components = new IComponent[entitys.Count];
            for (int i = 0; i < entitys.Count; i++)
            {
                IFormElementEntityDev entityDev = entitys[i] as IFormElementEntityDev;
                if (entityDev == null)
                {
                    Debug.WriteLine("UpdateView 时指定的实体对象没有实现 IFormElementEntityDev 接口");
                    continue;
                }

                components[i] = entityDev.Component;
            }

            UpdateView(components);
        }