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