C#UITypeEditor:如何在GridItem下直接显示CustomDialog?

时间:2013-09-05 12:29:07

标签: c#

我创建了一个自定义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的位置时,我可以计算列表的最大高度,一切都很好。

请求帮助

0 个答案:

没有答案