0

我创建了一个自定义 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 上方,并且部分位于屏幕之外。
查看错误的下拉菜单

所以在这里我会以同样的方式解决问题。当我能够在该函数中获得网格项的位置时,我可以计算列表的最大高度,一切都很好。

谢谢帮助

4

0 回答 0