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); } }
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); }