我创建了一个自定义UITypeEditor来显示一个Form并编辑其中的值。
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
DialogResult result = dropDownForm.ShowDialog();
if (result == DialogResult.OK)
{
// Get the Selected Entry
return dropDownForm.Value;
}
return value;
}
这很简单但现在我想将该表单直接放在PropertyGrid的GridItem下。
dropDownForm.Location = ???
这可以解决问题,但我在哪里可以获得表格的正确位置。
第一种方法:
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
if (context != null && provider != null)
{
// Uses the IWindowsFormsEditorService to display a
// drop-down UI in the Properties window:
editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
if (editorService != null)
{
// Add Values to the list control
PopulateListBox(context, value);
// Set to false before showing the control
escPressed = false;
// Attach the ListBox to the DropDown Control
editorService.DropDownControl(listDropDown);
// User pressed the ESC key --> Return the Old Value
if (!escPressed)
{
// Get the Selected Entry
ListBoxEntry entry = ListBox.SelectedItem as ListBoxEntry;
// If an Object is Selected and valid --> Return it
if (entry != null)
{
return entry.value;
}
}
}
}
return value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
我已经补充说明了这个问题。在这种情况下,我的列表框高度随着每个条目而增长。如果我只添加一小部分,一切都很好,下拉列表显示我应该的列表框 See right dropdown
当我添加多个条目时,会出现以下问题:下拉列表显示在GridItem上方,部分位于屏幕之外。
See wrong dropdown
所以在这里我会以同样的方式解决问题。当我能够在该函数中获得griditem的位置时,我可以计算列表的最大高度,一切都很好。
请求帮助