123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Drawing;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Reflection;
- using CommonLang.Property;
- using CommonFroms.Utils;
- using System.Drawing.Design;
- using CommonLang;
- using System.Collections;
- using CommonFroms.G2D.DataGrid;
- namespace CommonFroms.DescAttributeEdit
- {
- public partial class ValuePanel : UserControl
- {
- public object EditValue { get; private set; }
- private IG2DPropertyAdapter[] value_adapters;
- public ValuePanel()
- {
- InitializeComponent();
- this.propertyGrid1.PropertySort = PropertySort.Categorized;
- }
- public void SetAdapters(IG2DPropertyAdapter[] adapters)
- {
- this.value_adapters = CUtils.ArrayLink<IG2DPropertyAdapter>(adapters, new ValuePanelAdapter(adapters));
- }
- public void SetValue(object obj)
- {
- this.EditValue = obj;
- this.propertyGrid1.SelectedObject = new G2DPropertyDescriptor(obj, value_adapters);
- }
- class ValuePanelAdapter : IG2DPropertyAdapter
- {
- private IG2DPropertyAdapter[] adapters;
- public ValuePanelAdapter(IG2DPropertyAdapter[] adapters)
- {
- this.adapters = adapters;
- }
- public UITypeEditor GetEditor(MemberInfo field, Type fieldType, object ownerData)
- {
- return new ValuePanelUITypeEditor(adapters, field, ownerData);
- }
- public TypeConverter GetConverter(MemberInfo field, Type fieldType, object ownerData)
- {
- return null;
- }
- }
- class ValuePanelUITypeEditor : G2DMemberUITypeEditor
- {
- private IG2DPropertyAdapter[] adapters;
- private DescAttribute desc;
- public ValuePanelUITypeEditor(IG2DPropertyAdapter[] adapters, MemberInfo field, object ownerData)
- : base(field, ownerData)
- {
- this.adapters = CUtils.ArrayLink<IG2DPropertyAdapter>(adapters, new ValuePanelAdapter(adapters));
- this.desc = PropertyUtil.GetAttribute<DescAttribute>(field);
- }
- public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
- {
- if (fieldType.IsPrimitive)
- {
- return UITypeEditorEditStyle.None;
- }
- else if (fieldType.IsEnum)
- {
- return UITypeEditorEditStyle.None;
- }
- else if (fieldType.Equals(typeof(string)))
- {
- return UITypeEditorEditStyle.None;
- }
- else if (fieldType.IsClass)
- {
- return UITypeEditorEditStyle.Modal;
- }
- else if (fieldType.IsArray)
- {
- return UITypeEditorEditStyle.Modal;
- }
- return UITypeEditorEditStyle.Modal;
- }
- public override object EditValue(
- ITypeDescriptorContext context,
- IServiceProvider provider,
- object value)
- {
- ListAttribute listattr = PropertyUtil.GetAttribute<ListAttribute>(fieldInfo);
- if (listattr != null)
- {
- G2DCollectionEditor editor = new G2DCollectionEditor(
- fieldType,
- value,
- listattr.ElementTypes.ToArray(),
- adapters);
- if (editor.ShowDialog() == System.Windows.Forms.DialogResult.OK)
- {
- return editor.GetEditCompleteData();
- }
- }
- else
- {
- object result = ValueTypeDialog.ShowValueDialog(
- null, "设置 " + desc.Desc, fieldType, value, adapters);
- if (result != null)
- {
- return result;
- }
- }
- return base.EditValue(context, provider, value);
- }
- }
- }
- }
|