Example #1
0
        private void ButtonAddonSelect_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            UIPublic.ShowWaitingForm();
            var typeSelectControl = new TypeSelectControl();

            typeSelectControl.Initialize(p =>
            {
                return(p.IsDerivedFrom <DataFilter>());
            });
            UIPublic.CloseWaitingForm();
            WinFormPublic.ShowDialog(typeSelectControl);
        }
Example #2
0
        /// <summary>
        /// 选择编辑器类型
        /// </summary>
        /// <param name="objectType">对象类型</param>
        /// <returns>编辑器类型</returns>
        public static DialogReturn SelectEditControllerType(Type objectType, out Type editControllerType)
        {
            var typeSelectControl = new TypeSelectControl();

            typeSelectControl.Initialize(p => {
                return(IsEditControllerTypeOfType(p, objectType));
            });

            editControllerType = null;
            var result = WinFormPublic.ShowDialog(typeSelectControl);

            if (result == DialogReturn.OK)
            {
                editControllerType = typeSelectControl.SelectedType;
            }
            return(result);
        }
Example #3
0
 private void Edit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
 {
     if (e.Button.Kind == ButtonPredefines.Ellipsis)
     {
         var typeSelectControl = new TypeSelectControl();
         if (TypePredicate == null)
         {
             typeSelectControl.Initialize((p) => {
                 return(true);
             });
         }
         else
         {
             typeSelectControl.Initialize(TypeFilter);
         }
         if (WinFormPublic.ShowDialog(typeSelectControl) == DialogReturn.OK)
         {
             var edit = sender as ButtonEdit;
             edit.EditValue = typeSelectControl.SelectedType;
         }
     }
 }
Example #4
0
        /// <summary>
        /// 创建新的属性值
        /// </summary>
        /// <param name="objectType">对象类型</param>
        /// <param name="createElement">创建元素对象</param>
        /// <param name="propDesc">属性描述</param>
        /// <return>属性值</return>
        public static bool CreateNewAddonValue(Type objectType, bool createElement, out object newObject)
        {
            if (objectType.IsAddonDictionaryType() || objectType.IsAddonListType())
            {
                if (createElement)
                {
                    var listElementType = ReflectionPublic.GetCollectionElementType(objectType);
                    if (listElementType == null)
                    {
                        newObject = null;
                        return(false);
                    }

                    return(CreateNewAddonValue(listElementType, false, out newObject));
                }
                else
                {
                    // 创建新的对象
                    newObject = objectType.CreateInstance();
                    return(true);
                }
            }
            else
            {
                var typeSelectControl = new TypeSelectControl();
                if (objectType.IsGenericType && objectType.IsDerivedFrom(typeof(Ref <>)))
                {
                    var refType = objectType.GetGenericArguments()[0];
                    typeSelectControl.Initialize(p =>
                    {
                        return((p.IsDerivedFrom(refType) || p.IsDerivedFrom(typeof(Factory <>))) && p.IsClass && !p.IsAbstract);
                    });
                    if (WinFormPublic.ShowDialog(typeSelectControl) == DialogReturn.OK)
                    {
                        var selectedAddonType = typeSelectControl.SelectedType;
                        if (selectedAddonType != null)
                        {
                            if (selectedAddonType.IsDerivedFrom(typeof(Ref <>)))
                            {
                                // 创建新的工厂
                                var objectRefType = selectedAddonType.MakeGenericType(refType);
                                newObject = objectRefType.CreateInstance();
                                return(true);
                            }
                            else
                            {
                                // 创建新的对象并用ObjectRef引用
                                var newInstance   = selectedAddonType.CreateInstance();
                                var objectRefType = typeof(ObjectRef <>).MakeGenericType(refType);
                                newObject = objectRefType.CreateInstance(newInstance);
                                return(true);
                            }
                        }
                    }
                }
                else
                {
                    typeSelectControl.Initialize(p =>
                    {
                        if (objectType.IsGenericType)
                        {
                            return(p.IsDerivedFrom(objectType.GetGenericTypeDefinition()) && p.IsClass && !p.IsAbstract);
                        }
                        else
                        {
                            return(p.IsDerivedFrom(objectType) && p.IsClass && !p.IsAbstract);
                        }
                    });
                    if (WinFormPublic.ShowDialog(typeSelectControl) == DialogReturn.OK)
                    {
                        var selectedAddonType = typeSelectControl.SelectedType;
                        if (selectedAddonType != null)
                        {
                            if (selectedAddonType.IsGenericType)
                            {
                                // 泛型
                                var genericArgs = objectType.GetGenericArguments();
                                var genericType = selectedAddonType.MakeGenericType(genericArgs);
                                // 创建新的对象
                                newObject = genericType.CreateInstance();
                                return(true);
                            }
                            else
                            {
                                // 创建新的对象
                                newObject = selectedAddonType.CreateInstance();
                                return(true);
                            }
                        }
                    }
                }
            }
            newObject = null;
            return(false);
        }