Example #1
0
        public ExplorerPropertyView()
        {
            InitializeComponent();
            this.TabText = Language.Current.PropertyGridView;
            PropertyGridValidator validator = new PropertyGridValidator(typeof(EntityBase))
            {
                ActOnSub = true,
            };

            validator.Validator = (e) =>
            {
                bool   success = true;
                string message = null;
                if (e.Property == EntityBase.Property_Code)
                {
                    Debug.Assert(e.Objects.Length == 1, "验证 Code 时对象数目只能是一个");
                    object obj     = e.Objects[0];
                    string value   = e.Value.ToString();
                    Type   objType = obj.GetType();
                    if (objType.Equals(typeof(DataEntity)) || ReflectionHelper.IsSubOf(objType, typeof(DataEntity)))
                    {
                        if (_dataEntityArchive.EntityExist(value))
                        {
                            success = false;
                            message = Language.Current.PropertyGridView_MessageDataEntityCodeExist;
                        }
                    }
                    else if (objType.Equals(typeof(DataItemEntity)) || ReflectionHelper.IsSubOf(objType, typeof(DataItemEntity)))
                    {
                        DataItemEntity itemEntity = (DataItemEntity)obj;
                        if (_dataEntityArchive.ItemEntityExist(itemEntity.Owner.Id, value))
                        {
                            success = false;
                            message = Language.Current.PropertyGridView_MessageDataItemEntityCodeExist;
                        }
                    }
                    else
                    {
                        Debug.Assert(false, "未处理的类型");
                    }
                }
                return(new PropertyGridValidateResult(success, message));
            };
            propertyGrid.AddValidator(validator);
            propertyGrid.PropertyChanged += new PropertyGridPad.OnPropertyChangeHandler(propertyGrid_PropertyChanged);
        }
        public ExplorerPropertyView()
        {
            InitializeComponent();
            this.TabText = Language.Current.Explorer_PropertyView_TabText;
            PropertyGridValidator validator = new PropertyGridValidator(typeof(WindowEntity))
            {
                ActOnSub = true,
            };

            validator.Validator = (e) =>
            {
                bool   success = true;
                string message = null;
                if (e.Property == EntityBase.Property_Code)
                {
                    if (Keywords.Container(e.Value.ToString()))
                    {
                        success = false;
                        message = CommonLanguage.Current.ValueInefficacyUseKeywords;
                    }
                    else
                    {
                        Debug.Assert(e.Objects.Length == 1, "验证 Code 时对象数目只能是一个");
                        object obj   = e.Objects[0];
                        string value = e.Value.ToString();
                        if (_windowArchive.CheckExistByCode(value))
                        {
                            success = false;
                            message = Language.Current.Explorer_PropertyView_MessageCodeExist;
                        }
                    }
                }
                return(new PropertyGridValidateResult(success, message));
            };
            propertyGrid.AddValidator(validator);
            propertyGrid.PropertyChanged += new PropertyGridPad.OnPropertyChangeHandler(propertyGrid_PropertyChanged);
        }
        public FormPropertyGrid(FormHostingContainer container)
        {
            InitializeComponent();

            _container = container;
            _container.ActiveHostingChanged    += new FormHostingContainer.OnActiveHostingChangedHandler(_container_ActiveHostingChanged);
            _container.HostingSelectionChanged += new FormHostingContainer.OnHostingSelectionChangedHandler(_container_HostingSelectionChanged);
            _container.HostingInitFormElementsComponentComplete +=
                new FormHostingContainer.OnHostingInitFormElementsComponentCompleteHandler(_container_HostingInitFormElementsComponentComplete);

            #region PropertyGridValidator

            PropertyGridValidator validator = new PropertyGridValidator(typeof(EntityBase))
            {
                ActOnSub = true,
            };
            validator.Validator = (e) =>
            {
                bool   success = true;
                string message = null;

                //因为C#是区分大小写的,所以这里不转为全小写或全大写,避免Code和CODE两个不同Property
                //理论上我不会这么做
                if (e.Property == EntityBase.Property_Code)
                {
                    //判断是否使用了系统保留字
                    if (Keywords.Container(e.Value.ToString()))
                    {
                        success = false;
                        message = CommonLanguage.Current.ValueInefficacyUseKeywords;
                    }
                    else
                    {
                        Debug.Assert(e.Objects.Length == 1, "验证 Code 时对象数目只能是一个");
                        object obj = e.Objects[0];

                        string value = e.Value.ToString();

                        //判断在此窗体范围内,代码是否已被占用
                        if (FormHostingContainer.Instance.ActiveFormEntity.ValidateCode(value) == false)
                        {
                            success = false;
                            message = Language.Current.FormDesigner_FormPropertyGrid_MessageFormElementCodeExist;
                        }
                        else
                        {
                            //如果当前选择的目标对象是一个窗体,则还需判断指定的代码是否与其它窗体的代码冲突
                            //此处不用考虑多选的情况,因为多选状态下,代码属性不显示
                            WindowEntity windowEntity = e.Objects[0] as WindowEntity;
                            if (windowEntity != null)
                            {
                                //判断code是否已被占用
                                if (_windowComponentService.CheckExistByCode(value))
                                {
                                    success = false;
                                    message = Language.Current.FormDesigner_FormPropertyGrid_MessageFormEntityExist;
                                }
                            }
                        }
                    }
                }
                return(new PropertyGridValidateResult(success, message));
            };
            propertyGrid.AddValidator(validator);

            #endregion

            //注意,ComboBox里绑定的对象是实际控件,不是Entity
            this.comboBoxFormElementList.DrawMode              = DrawMode.OwnerDrawFixed;
            this.comboBoxFormElementList.Sorted                = false;
            this.comboBoxFormElementList.DrawItem             += new DrawItemEventHandler(ComboBoxDrawItem);
            this.comboBoxFormElementList.MeasureItem          += new MeasureItemEventHandler(ComboBoxMeasureItem);
            this.comboBoxFormElementList.SelectedIndexChanged += new EventHandler(ComboBoxSelectedIndexChanged);

            this.VisibleChanged += new EventHandler(FormPropertyGrid_VisibleChanged);

            this.Icon    = DrawingTool.ImageToIcon(IconsLibrary.Property);
            this.TabText = Language.Current.FormPropertyGrid_TabText;
        }
        public ExplorerPropertyView()
        {
            InitializeComponent();
            this.TabText = Language.Current.Explorer_PropertyView_TabText;
            PropertyGridTypeWrapper toolStripPageEntityWrapper = new PropertyGridTypeWrapper(typeof(ToolStripPageEntity))
            {
                ActOnSubClass = true,
                VisibleAll    = true,
            };

            toolStripPageEntityWrapper.VisibleException.Add(EntityBase.Property_Remark);
            propertyGrid.AddTypeWrapper(toolStripPageEntityWrapper);
            PropertyGridTypeWrapper toolStripGroupEntityWrapper = new PropertyGridTypeWrapper(typeof(ToolStripGroupEntity))
            {
                ActOnSubClass = true,
                VisibleAll    = true
            };

            toolStripGroupEntityWrapper.VisibleException.Add(EntityBase.Property_Remark);
            propertyGrid.AddTypeWrapper(toolStripGroupEntityWrapper);
            PropertyGridValidator toolStripItemValidator = new PropertyGridValidator(typeof(EntityBase))
            {
                ActOnSub = true,
            };

            toolStripItemValidator.Validator = (e) =>
            {
                bool   success = true;
                string message = null;
                if (e.Property == EntityBase.Property_Code)
                {
                    if (Keywords.Container(e.Value.ToString()))
                    {
                        success = false;
                        message = CommonLanguage.Current.ValueInefficacyUseKeywords;
                    }
                    else
                    {
                        Debug.Assert(e.Objects.Length == 1, "验证 Code 时对象数目只能是一个");
                        object obj = e.Objects[0];
#if DEBUG
                        Type objType = obj.GetType();
                        if (ReflectionHelper.IsSubOf(objType, typeof(ToolStripItemAbstract)) == false &&
                            ReflectionHelper.IsSubOf(objType, typeof(ToolStripPageEntity)) == false &&
                            ReflectionHelper.IsSubOf(objType, typeof(ToolStripGroupEntity)) == false &&
                            ReflectionHelper.IsSubOf(objType, typeof(MenuEntity)) == false)
                        {
                            Debug.Assert(false, "obj 不是有效的用于菜单或工具栏的对象类型");
                        }
#endif
                        string value = e.Value.ToString();
                        if (_toolStripArchive.CheckExistByCode(value) ||
                            _toolStripArchive.PageExistByCode(value) ||
                            _toolStripArchive.GroupExistByCode(value) ||
                            _menuStripArchive.CheckExistByCode(value))
                        {
                            success = false;
                            message = Language.Current.Explorer_PropertyView_MessageCodeExist;
                        }
                    }
                }
                return(new PropertyGridValidateResult(success, message));
            };
            propertyGrid.AddValidator(toolStripItemValidator);
            propertyGrid.PropertyChanged += new PropertyGridPad.OnPropertyChangeHandler(propertyGrid_PropertyChanged);
        }