EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:使用DevExpress WinForms控件实现属性编辑器

本主题演示如何使用自定义蒙版来实现属性编辑器。此属性编辑器将使用CalcEdit从编辑XtraEditors库。将为此编辑器设置一个货币掩码。

提示

完整的示例项目可从http://www.devexpress.com/example=E232的DevExpress代码示例数据库中获得。

下图显示了生成的属性编辑器:

CalcEditPropertyEditor

由于我们将使用从编辑XtraEditors库,我们的属性编辑器应该从继承DXPropertyEditor类。此类支持用于就地编辑的编辑器功能。它为此提供了额外的方法。请注意,您的编辑器应该是公开的。

using DevExpress.ExpressApp.Win.Editors;
//...
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {

}

实施属性编辑器时,应将PropertyEditor属性应用于它。此属性表示应用程序模型加载器的指示符。可以将使用此属性的类设置为显示该属性的参数指定的类型的属性。

using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Win.Editors;
//...
[PropertyEditor(typeof(decimal), true)]
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {

}

现在,我们的属性编辑器将在可以显示十进制属性的属性编辑器类型中可用。要将属性编辑器设置为自动用于指定数据类型的所有属性,请将true作为第二个属性参数传递。

DXPropertyEditor类设置控件的EditValue财产作为粘结性。但是,CalcEdit控件将编辑值转换为Decimal类型。可以通过Value属性访问编辑器的十进制值。因此,我们可以将Value属性设置为绑定属性。

using System;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Model;
//...
[PropertyEditor(typeof(decimal), true)]
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {
   public MyDecimalCalcEditPropertyEditor(Type objectType, IModelMemberViewItem model) 
      : base(objectType, model) {
      this.ControlBindingProperty = "Value";
   }
}

要将CalcEdit编辑器指定为用于显示属性编辑器属性的控件,请重写CreateControlCore方法:

using DevExpress.XtraEditors;
//...
[PropertyEditor(typeof(decimal), true)]
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {
   protected override object CreateControlCore() {
      return new CalcEdit();
   }
//...
}

要为属性编辑器指定所需的设置,我们需要重写SetupRepositoryItem方法(请参阅DXPropertyEditor)。此方法的item参数指定为CalcEdit编辑器创建的默认存储库项目(请参阅CalcEdit.Properties)。

using DevExpress.XtraEditors.Repository;
//...
[PropertyEditor(typeof(decimal), true)]
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {
   protected override void SetupRepositoryItem(RepositoryItem item) {
      base.SetupRepositoryItem(item);
         ((RepositoryItemCalcEdit)item).Mask.EditMask = "C";
         ((RepositoryItemCalcEdit)item).Mask.UseMaskAsDisplayFormat = true;
   }
   //...
}

在上面的代码中,为编辑器设置了货币掩码。设置相同的遮罩以用作显示格式。

例如,要在可编辑的GridListEditor中就地使用属性编辑器,我们应该重写CreateRepositoryItem方法,并返回所需的存储库项目。

[PropertyEditor(typeof(decimal), true)]
public class MyDecimalCalcEditPropertyEditor : DXPropertyEditor {
   protected override RepositoryItem CreateRepositoryItem() {
      return new RepositoryItemCalcEdit();
   }
   //...
}
注意

覆盖CreateRepositoryItem方法是可选的。仅当您要在可编辑的列表编辑器的单元格中使用属性编辑器时才需要这样做。请注意,将创建一个新的PropertyEditor对象以初始化GridColumn.ColumnEdit属性,然后立即处置此对象。因此,对于事件处理程序,自定义PropertyEditor子代是不正确的位置。而是在您的RepositoryItem类中处理事件或覆盖相应的受保护虚拟方法,引入必要的属性,然后在属性编辑器的CreateRepositoryItem方法中对其进行初始化。

要查看正在使用的属性编辑器,请在为Windows Forms应用程序项目调用的模型编辑器中将其设置为十进制属性。为此,请使用BOModel |的PropertyEditorType属性。<类别> | 会员| <成员>或视图| <DetailView> | 物品| <PropertyEditor>节点。

相关文章

转载保留此链接,注明出处