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