C#.Net开发继承UITypeEditor接口的自定义属性编辑器
作者:C/S框架网  发布日期:2011/08/08 21:48:16
  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:

点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇