如何检索DevExpress GridLookupEdit的更改大小?

时间:2014-06-10 20:04:57

标签: winforms devexpress

我有一个DevExpress GridLookupEdit。

我可以将弹出窗口的默认大小更改为我想要的任何内容:

theGrid.Properties.PopupFormSize = New Size(mywidth, myHeight)

但是,我想保存每个用户的身高/宽度。

所以我运行winform的程序,单击它,调整窗口大小,然后关闭弹出控件。

然后CloseUp事件触发。我检查theGrid.Properties.PopupFormSize,高度和宽度与我的默认值相同。

如何获取调整后的值?

我正在使用DevExpress 13.2

1 个答案:

答案 0 :(得分:1)

GridLookupEdit使用PopupGridLookUpEditForm对象显示弹出内容并将其存储在PopupForm属性中。但是此表单的大小不等于您可以通过GridLookupEdit.Properties.PopupFormSize属性设置的大小。此表单具有EmbeddedControl属性,当您更改GridLookupEdit.Properties.PopupFormSize属性时,实际上您更改了此嵌入式控件的大小。因此,如果要为每个用户保存大小,则需要保存此控件的大小 不幸的是,GridLookupEdit.PopupForm属性和PopupGridLookUpEditForm.EmbeddedControl属性受到保护。 PopupGridLookUpEditForm.EmbeddedControl实际上是GridControl个对象。对于DevExpress 14.1,您可以通过GridLookupEdit.Properties.View.GridControl属性获取此对象。

所以在DevExpress中,14.1 GridLookupEdit.Properties.View.GridControl.Size属性就是你要找的。

但是如果你的版本中没有GridControl对象,那么你可以使用反射或创建后代。

这里是反思的例子:

var popupFormProperty = theGrid.GetType().GetProperty("PopupForm", BindingFlags.NonPublic | BindingFlags.Instance, null, typeof(PopupGridLookUpEditForm), new Type[0], null);
var form = popupFormProperty.GetValue(theGrid);

var embeddedControlProperty = form.GetType().GetProperty("EmbeddedControl", BindingFlags.NonPublic | BindingFlags.Instance);
var embeddedControl = (Control)embeddedControlProperty.GetValue(form);//the size of this control is what you are looking for<


另一种方法是创建自定义GridLookUp编辑器。根据{{​​3}},您需要创建Custom Editor Class和Custom Repository Item Class,例如:

[UserRepositoryItem("RegisterCustomGridLookUpEdit")]
public class RepositoryItemCustomGridLookUpEdit : RepositoryItemGridLookUpEdit
{
    static RepositoryItemCustomGridLookUpEdit() { RegisterCustomGridLookUpEdit(); }

    static public void RegisterCustomGridLookUpEdit()
    {
        EditorRegistrationInfo.Default.Editors.Add(
            new EditorClassInfo(CustomGridLookUpEditName,
            typeof(CustomGridLookUpEdit), typeof(RepositoryItemCustomGridLookUpEdit),
            typeof(GridLookUpEditBaseViewInfo), new ButtonEditPainter(), true, null));
    }

    public const string CustomGridLookUpEditName = "CustomGridLookUpEdit";

    public override string EditorTypeName { get { return CustomGridLookUpEditName; } }
}

public class CustomGridLookUpEdit : GridLookUpEdit
{
    static CustomGridLookUpEdit() { RepositoryItemCustomGridLookUpEdit.RegisterCustomGridLookUpEdit(); }

    public override string EditorTypeName { get { return RepositoryItemCustomGridLookUpEdit.CustomGridLookUpEditName; } }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public new RepositoryItemCustomGridLookUpEdit Properties
    {
        get { return base.Properties as RepositoryItemCustomGridLookUpEdit; }
    }

    protected override PopupBaseForm CreatePopupForm() { return new CustomPopupGridLookUpEditForm(this); }

    protected new CustomPopupGridLookUpEditForm PopupForm { get { return (CustomPopupGridLookUpEditForm)base.PopupForm; } }

    public Size PopupFormSize { get { return PopupForm.PopupFormSize; } }
}

public class CustomPopupGridLookUpEditForm : PopupGridLookUpEditForm
{
    public CustomPopupGridLookUpEditForm(CustomGridLookUpEdit ownerEdit) : base(ownerEdit) { }

    public Size PopupFormSize { get { return EmbeddedControl.Size; } }
}

如果您将此CustomGridLookUpEdit添加到项目中,则可以使用其PopupFormSize属性来获取所需的大小。