标签: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
/// <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#.Net组件开发 - 自定义设计器持久化对象的属性
标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner)
标签:C#.Net组件开发 - 属性窗体内显示自定义名称
标签:C#.Net组件开发 - 设计时持久化对象数组
FastReport.NET2023|动态列报表自动隐藏列及调整标签宽度|C/S开发框架
C#.Net组件开发(高级篇) - 使用自定义TypeConverter生成设计时代码
C#.Net组件开发 - 使用Attach to Process实时调试设计器代码
C#.Net组件开发(高级篇) - 全部源码下载
C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器
C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器
C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码
C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
使用Winform代码生成器生成FastReport.NET报表模板文件(frx文件)
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
CSFramework.WebApi V3.0 WebApi开发框架(.NETCore+EFCore)
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
标签:C#.Net组件开发 - 自定义设计器持久化对象的属性
标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner)
标签:C#.Net组件开发 - 属性窗体内显示自定义名称
标签:C#.Net组件开发 - 设计时持久化对象数组
FastReport.NET2023|动态列报表自动隐藏列及调整标签宽度|C/S开发框架
C#.Net组件开发(高级篇) - 使用自定义TypeConverter生成设计时代码
C#.Net组件开发 - 使用Attach to Process实时调试设计器代码
C#.Net组件开发(高级篇) - 全部源码下载
C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器
C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器
C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码
C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
使用Winform代码生成器生成FastReport.NET报表模板文件(frx文件)
VS2022+.NET7:从其他项目复制Form.cs窗体文件无法打开设计器(解决方案)
CSFramework.WebApi V3.0 WebApi开发框架(.NETCore+EFCore)
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服

