如何将弹出编辑器与网格单元格对齐?

时间:2018-05-21 08:55:49

标签: c# winforms propertygrid

我有一个属性网格,其中包含使用UITypeEditor的自定义编辑器。 我想将其弹出窗口与属性网格的单元格对齐,就像属性为Color时的默认颜色编辑器一样,但我找不到有关网格单元格位置和大小的任何信息。

我的UITypeEditor.EditValue方法将PropertyDescriptorGridEntry对象作为context参数获取,但它也没有坐标,其GridItems集合为空。

任何人的想法? PropertyGrid是否有(免费)替代品可以提供此功能 信息?

这是我目前的代码:

class MyPropertyGridEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle( System.ComponentModel.ITypeDescriptorContext context )
    {
        return UITypeEditorEditStyle.Modal;
    }

    // Displays the UI for value selection.
    public override object EditValue( 
                      System.ComponentModel.ITypeDescriptorContext context,
                      System.IServiceProvider provider,
                      object value )
    {
        var form = new MyEditorForm( true );
        // ??? Where can I find Location and Size of the grid cell ???
        if( form.ShowDialog() == DialogResult.OK )
        {
            value = form.Items;
        }

        return value;
    }
}

Example of how my own editor shall be aligned

以上是我希望如何对齐表单的示例,该示例显示了默认的颜色编辑器。

2 个答案:

答案 0 :(得分:1)

首先 - 你不会显示弹出窗口,萌芽对话框。这是两件不同的事情。

PropertyGrid组件非常复杂,自定义弹出窗口看起来并不那么容易。

有颜色编辑器的源代码,你可以从中激发灵感。

http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/untmp/whidbey/REDBITS/ndp/fx/src/Designer/Drawing/System/Drawing/Design/ColorEditor@cs/1/ColorEditor@cs

答案 1 :(得分:1)

默认行为是保持对齐。正如在另一个答案中所提到的,您正在显示一个对话框而不是显示下拉列表。

以下是显示简单下拉列表的示例。您可以将任何控件显示为下拉列表,在此示例中,我显示了for (int i = 0; i < 9; i++) { Vector<Edge> v = new Vector<>(9); matrix.add(v); for (int j = 0; j < 9; j++) v.add(null); }

ListBox