我有一个DevExpress GridLookupEdit。
我可以将弹出窗口的默认大小更改为我想要的任何内容:
theGrid.Properties.PopupFormSize = New Size(mywidth, myHeight)
但是,我想保存每个用户的身高/宽度。
所以我运行winform的程序,单击它,调整窗口大小,然后关闭弹出控件。
然后CloseUp
事件触发。我检查theGrid.Properties.PopupFormSize
,高度和宽度与我的默认值相同。
如何获取调整后的值?
我正在使用DevExpress 13.2
答案 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
属性来获取所需的大小。