Example #1
0
 private void Edit_ParseEditValue(object sender, ConvertEditValueEventArgs e)
 {
     e.Handled = true;
     if (e.Value.IsNotNullOrEmpty())
     {
         if (e.Value is string)
         {
             e.Value = ReflectionPublic.GetType(e.Value as string);
         }
     }
 }
Example #2
0
        /// <summary>
        /// 编辑属性
        /// </summary>
        /// <param name="componentObject">组件对象</param>
        /// <param name="propertyName"></param>
        /// <returns>DialogReturn</returns>
        public static DialogReturn ShowEditPropertyDialog(object componentObject, string propertyName)
        {
            var commonObjectEditController = new CommonObjectEditController();

            commonObjectEditController.StartEditProperty(componentObject, propertyName);
            var propDesc          = ReflectionPublic.GetPropertyDescriptor(componentObject.GetType(), propertyName);
            var propObj           = propDesc.GetValue(componentObject);
            var objectEditControl = commonObjectEditController.CreateEditControl(propDesc.PropertyType) as BaseObjectEditControl;

            objectEditControl.EditValue = propObj;
            return(WinFormPublic.ShowDialog(objectEditControl));
        }
        public override Type ResolveName(string typeName, string typeNamespace, Type declaredType, DataContractResolver knownTypeResolver)
        {
            // 将Namespace解析为类型名称
            Type type = ReflectionPublic.GetType(typeNamespace);

            if (type != null)
            {
                return(type);
            }

            return(knownTypeResolver.ResolveName(
                       typeName, typeNamespace, declaredType, null));
        }
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);
        }