标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性

  标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性

标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性


最核心功能:

*** 在属性器修改了对象的属性,必须持久化属性的值到xxx.Designer.cs文件中 ***

很多朋友在此忘而却步,不知如何处理了,他们反复在问:为什么我修改了对象的属性,再次打开窗体时属性的值不见了?知道这是为什么吗?那里因为你开发的属性编辑器没有生成设计时持久化代码!



生成设计时持久化代码:

自定义的属性编辑器:

C# Code:


/// <summary>
///自定义的属性编辑器
/// </summary>
public class MyItemEditor : UITypeEditor
{
   public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
   {
      return UITypeEditorEditStyle.Modal;
   }
   
   public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
   {
      if (provider != null)
      {
         IWindowsFormsEditorService svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
         
         if (svc != null && context.Instance != null)
         {
            //取出设计器所在的窗体(组件/控件所在窗体)
            IDesignerHost host = (IDesignerHost)provider.GetService(typeof(IDesignerHost));
            if (host == null) return value;
            
            //context.Instance:可以得到当前的Component1组件。
            ComponentCS c = context.Instance as ComponentCS;
            MyObject o = c.Object;
            if (o == null) o = new MyObject();
            
            frmMyObjectEditor editForm = new frmMyObjectEditor(o);
            svc.ShowDialog(editForm);//打开属性编辑窗体
            editForm.Dispose();//释放内存
            
            //重新序列化内容到.Designer.cs文件
            context.PropertyDescriptor.SetValue(context.Instance, value);
            
            return o;//返回修改后的对象
         }
      }
      
      return value; //返回预设的对象
   }
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898




重写UITypeEditor.EditValue方法:

   
//重新序列化内容到.Designer.cs文件 
   context.PropertyDescriptor.SetValue(context.Instance, value);





本文来源文章:


C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

标签C#.Net开发 - 定义属性编辑器持久对象属性
标签C#.Net开发 - 定义设计器持久对象属性
C#.Net开发 - 设计时使用定义属性编辑器持久对象
标签C#.Net开发 - 设计时持久对象数组
标签C#.Net开发 - 属性窗体内显示定义名称
标签C#.Net开发 - 定义设计器(ComponentDesigner)
C#.Net开发(高级篇) - 定义CollectionEditor编辑器
C#.Net开发继承UITypeEditor接口定义属性编辑器
C#.Net开发(高级篇) - 开发复杂设计时组件编辑器
C#.Net开发(高级篇) - 使用定义TypeConverter生成设计时代码
DevExpress GridControlEmbeddedNavigator属性添加用户定义按钮
C#.Net 持久对象为XML文件
NET开发框架,基于ADO.NET数据持久快速开发框架平台-C/S框架网原创产品
C#.Net定义 - GridPopupContainerEdit
C# 控属性是个类,如何给添加定义属性
属性是个类,如何给添加定义属性(C#)
C#.Net定义 - GridPopupContainerLookup
C#.Net开发(高级篇) - 设计时在窗体设计器文件内生成组件代码
C#持久对象为XML文件(MyXmlSerializer)
C#.Net定义 - CheckedListBoxEditor(支持多值勾选及新增)