我创建了一个自定义 UITypeEditor 来显示表单并编辑其中的值。
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;
}
我已添加以澄清问题。在这种情况下,我的列表框高度随着每个条目的增加而增加。如果我只添加少量一切都很好,下拉列表会显示我的列表框。
见右下拉
当我添加许多条目时,会出现以下问题:下拉列表显示在 GridItem 上方,并且部分位于屏幕之外。
查看错误的下拉菜单
所以在这里我会以同样的方式解决问题。当我能够在该函数中获得网格项的位置时,我可以计算列表的最大高度,一切都很好。
谢谢帮助