EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:基于自定义控件(WinForms)实施属性编辑器

本主题说明如何为WinForms应用程序实现属性编辑器。出于演示目的,在此示例中实现了基于NumericUpDown控件的整数属性编辑器。

注意
  • 您可以在XAF随附的FeatureCenter演示中看到此处实现的代码。默认情况下,此演示位于%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter文件夹中。
  • 如果您打算使用默认情况下未集成到XAF的DevExpress WinForms控件,请参阅如何:使用DevExpress WinForms控件实现属性编辑器

请按照下列步骤来实现WinForms属性编辑器。

  1. 在WinForms模块项目中,继承PropertyEditorWinPropertyEditor类。请注意,您的编辑器应该是公开的。
  2. 应用PropertyEditorAttribute来指定将使用属性编辑器的数据类型(在此示例中为Int32)。如果将true传递给PropertyEditor属性的最后一个参数,则属性编辑器将用于任何业务类中的所有整数属性。
  3. 重写CreateControlCore方法。在此方法中,实例化,初始化并返回控件实例(在此示例中为NumericUpDown控件)。
  4. 确定当用户更改编辑值时控件发生的事件(例如NumericUpDown.ValueChanged事件)。请参阅控件的文档以找到适当的事件。订阅此事件,然后从事件处理程序中调用OnControlValueChanged方法(在内部引发PropertyEditor.ControlValueChanged事件)。
  5. 重写Dispose方法,并取消订阅在上一步中处理的事件。
  6. (可选)支持IInplaceEditSupport接口,并实现IInplaceEditSupport.CreateRepositoryItem方法。仅当您要使列在可编辑列表视图中可编辑时,才需要执行此步骤。

以下代码根据上述步骤演示CustomIntegerEditor类的实现。

using System.Windows.Forms;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Win.Editors;
using DevExpress.XtraEditors.Repository;
// ...
[PropertyEditor(typeof(Int32), false)]
public class CustomIntegerEditor : PropertyEditor, IInplaceEditSupport {
    private NumericUpDown control = null;
    protected override void ReadValueCore() {
        if(control != null) {
            if(CurrentObject != null) {
                control.ReadOnly = false;
                control.Value = (int)PropertyValue;
            }
            else {
                control.ReadOnly = true;
                control.Value = 0;
            }
        }
    }
    private void control_ValueChanged(object sender, EventArgs e) {
        if(!IsValueReading) {
            OnControlValueChanged();
            WriteValueCore();
        }
    }
    protected override object CreateControlCore() {
        control = new NumericUpDown();
        control.Minimum = 0;
        control.Maximum = 5;
        control.ValueChanged  = control_ValueChanged;
        return control;
    }
    protected override void OnControlCreated() {
        base.OnControlCreated();
        ReadValue();
    }
    public CustomIntegerEditor(Type objectType, IModelMemberViewItem info)
        : base(objectType, info) {
    }
    protected override void Dispose(bool disposing) {
        if(control != null) {
            control.ValueChanged -= control_ValueChanged;
            control = null;
        }
        base.Dispose(disposing);
    }
    RepositoryItem IInplaceEditSupport.CreateRepositoryItem() {
        RepositoryItemSpinEdit item = new RepositoryItemSpinEdit();
        item.MinValue = 0;
        item.MaxValue = 5;
        item.Mask.EditMask = "0";
        return item;
    }
    protected override object GetControlValueCore() {
        if(control != null) {
            return (int)control.Value;
        }
        return null;
    }
}

要使用CustomIntegerEditor属性编辑器显示特定属性,请自定义应用程序模型。调用WinForms模块项目的模型编辑器,然后导航到所需的BOModel |。班级| 会员| 成员节点。将节点的IModelCommonMemberViewItem.PropertyEditorType属性设置为CustomIntegerEditor。此后,成员节点指定的属性将由CustomIntegerEditor在所有View中显示。要仅在特定的详细信息视图中使用CustomIntegerEditor属性编辑器,请使用视图|的PropertyEditorType属性| <DetailView> | 物品| 改为使用<PropertyEditor>节点。

注意

您可能需要实现IAppearanceFormat接口,并将条件外观模块的IAppearanceFormat.BackColorIAppearanceFormat.FontColorIAppearanceFormat.FontStyle设置手动应用于创建的控件。

相关文章

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