是否可以更改PropertyGrid中显示的文本?

时间:2017-03-27 08:52:44

标签: c# winforms

当所选对象是数组时,有没有办法更改PropertyGrid控件中显示的文本(“Item_Type [] Array”)?

我喜欢网格如何显示层次结构中的每个Item,但我认为如果我可以更改或删除“Item_Type [] Array”文本会更好。

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用自定义转换器实现此目的:

public class Test
{
    [TypeConverter(typeof(ConverterArray))]
    public string[] Property { get; set; } = new[] { "1", "2", "3" };
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        propertyGrid1.SelectedObject = new Test();
    }
}

public class ConverterArray : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
    {
        if (destType == typeof(string))
            return "An array kk?";
        return base.ConvertTo(context, culture, value, destType);
    }
}

没有转换器的屏幕截图,并带有:

以可扩展列表(以索引作为名称)查看和编辑项目从ArrayConverter继承转换器。

如果你需要删除/添加项目,你必须实现自定义编辑器(通常你会使用另一个表单并使用模态编辑器UITypeEditorEditStyle.Modal):

public class EditorHeaterPID : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) => UITypeEditorEditStyle.Modal;

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        SomeForm form = new SomeForm(value);
        if (form.ShowDialog() == DialogResult.OK)
            return form.Items;
        return value;
    }
}