C#.Net开发继承UITypeEditor接口的自定义属性编辑器


  C#.Net开发继承UITypeEditor接口的自定义属性编辑器C#.Net开发继承UITypeEditor接口的自定义属性编辑器


开发一个项目必然有很多选择功能,比如选择一个货品类型或某种类别,需要在界面上显示名称(Display Name)而数据库存储编号(ID)。我用过Delphi开发工具里面有第三方控件支持,而.Net本身没有适合这个功能的组件。DevExpress有个LookUpEdit,虽然支持此功能,但有个缺点:LookUpEdit控件必须绑定Properties.DataSouce,指定一个数据源,还要设置DisplayMember和ValueMemberDataSource可以是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基类。

C# Code:

/// <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属性定义。

C# Code:

/// <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))]




C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


Source Code:

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)
下一篇:C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
评论列表

发表评论

评论内容
昵称:
关联文章

C#.Net开发继承UITypeEditor接口定义属性编辑器
标签:C#.Net组件开发 - 定义属性编辑器持久化对象属性
C#.Net组件开发 - 设计时使用定义属性编辑器持久化对象
C#.Net组件开发(高级篇) - 定义CollectionEditor编辑器
标签:C#.Net组件开发 - 定义设计器持久化对象属性
标签:C#.Net组件开发 - 属性窗体内显示定义名称
C#.Net组件开发(高级篇) - 开发复杂设计时组件编辑器
标签:C#.Net组件开发 - 定义设计器(ComponentDesigner)
C# 控件属性是个类,如何给添加定义属性
控件属性是个类,如何给添加定义属性(C#)
C# interface:定义接口
C#.Net定义控件 - GridPopupContainerEdit
C#.Net定义控件 - GridPopupContainerLookup
C#.Net组件开发(高级篇) - 使用定义TypeConverter生成设计时代码
.NET Core 集成Swagger文档与定义Swagger UI
C#.Net用户定义控件制作教程
DevExpress GridControl组件EmbeddedNavigator属性添加用户定义按钮
WinFramework轻量级开发框架 - 界面扩展按钮-定义按钮
C#开发定义控件-设置显示工具箱中图标
C#.Net定义控件设置图标ToolboxBitmap用法