C#.Net开发继承UITypeEditor接口的自定义属性编辑器
C#.Net开发继承UITypeEditor接口的自定义属性编辑器
开发一个项目必然有很多选择功能,比如选择一个货品类型或某种类别,需要在界面上显示名称(Display Name)而数据库存储编号(ID)。我用过Delphi开发工具里面有第三方控件支持,而.Net本身没有适合这个功能的组件。DevExpress有个LookUpEdit,虽然支持此功能,但有个缺点:LookUpEdit控件必须绑定Properties.DataSouce,指定一个数据源,还要设置DisplayMember和ValueMember。DataSource可以是ObjectList或者DataTable,必须先准备这个数据源,比如创建一个对象数组或者下载一个DataTable,只要绑定好DataSource就可以用了。
我们可以把DataSource 看作为一个数据字典(基础数据),如果绑定DataTable,意味着数据库必须要有这张表,或者自己New一个DataTable也行,当然从视图取数也是可行的。
如果有一种情况:数据源只有ID,DisplayName两个属性,用以上方式处理是不是有点杀鸡焉用牛刀?是不是人为复杂化了?所以,我着手开发一个基于在属性编辑框内定义数据源的自定义控件,取名ucValueEditor,这个控件继承LookUpEdit。
如下图:
拖一个ucValueEditor,按F4显示属性窗体。
点Items属性右侧的[...]按钮打开属性编辑器(Value Editor),在表格内输入Value,DisplayName数据,定义好后点OK按钮。
注:Items属性类型是一个带有特殊符号的String,用于初始化这个二维表格,在设计时会本地化Items的数据,再次打开时会解析成一张二维表。
运行程序,再看LookUpEdit控件绑定的数据源:
关键代码:
PropertyEditor 类,自定义属性编辑器需要继承UITypeEditor基类。
/// <summary>
/// 自定义属性编辑器
/// </summary>
public class PropertyEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
//指定为模式窗体属性编辑器类型
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
//打开属性编辑器修改数据
return frmValueEditor.EditValue(value);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
Items属性定义。
/// <summary>
/// 带符号的字符串
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Editor(typeof(PropertyEditor), typeof(UITypeEditor))]
[Localizable(true)]
[Category("Appearance")]
[Description("自定义数据列表")]
public object Items
{
get { return _Items; }
set
{
_Items = value;
ValueToTable(value);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
指定自定义类型的属性编辑器:
[Editor(typeof(PropertyEditor), typeof(UITypeEditor))]

Source Code:
C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器
C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器
标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性
标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner)
FastReport.NET自动文本宽度+自动换行+自动行高|C/S开发框架
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET各版本常用语法糖大全(C#3~C#10)|C/S开发框架
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore)|C/S开发框架
CSFrameworV6试用版开发指南 | 主程序初始化CSFramework.EF数据库框架(.NET8)|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
CSFramework开发框架使用.NET Reactor加壳软件导致多语言失效|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内容管理系统 |
在线客服
