如何自定义PropertyGrid对象的集合编辑器中的描述?

时间:2013-04-03 23:28:14

标签: c# winforms propertygrid collectioneditor

我有一个包含多个公共属性的类。其中一个属性是包含另一个类的实例的List。它打破了这样的事情:

namespace Irig106Library.Filters.PCM
{
    [Description("Definition")]
    public class MinorFrameFormatDefinition
    {
        [Description("Word Number")]
        public int WordNumber { get; set; }

        [Description("Number of Bits")]
        public int NumberOfBits { get; set; }
    }

    public class MinorFrame
    {
        // ... other properties here

        [Category("Format")]
        [Description("Minor Frame Format Definitions")]
        public List<MinorFrameFormatDefinition> MinorFrameFormatDefinitions { get; set; }
    }
}

我有一个PropertyGrid对象,用于编辑Minor Frame对象。它有一个字段,包含对MinorFrameFormatDefinition个对象集合的引用。当我单击此字段中的按钮以打开集合编辑器,然后单击添加按钮时,我得到:

enter image description here

如何让集合编辑器使用Definition代替Irig106Library.Filters.PCM.MinorFrameFormatDefinition标记对象?

1 个答案:

答案 0 :(得分:4)

您可以覆盖ToString(),就像这样

public class MinorFrameFormatDefinition
{
    [Description("Word Number")]
    public int WordNumber { get; set; }

    [Description("Number of Bits")]
    public int NumberOfBits { get; set; }

    public override string ToString()
    {
        return "hello world";
    }
}

或者,如果您不想更改类,您还可以在其上定义TypeConverter:

[TypeConverter(typeof(MyTypeConverter))]
public class MinorFrameFormatDefinition
{
    [Description("Word Number")]
    public int WordNumber { get; set; }

    [Description("Number of Bits")]
    public int NumberOfBits { get; set; }
}

public class MyTypeConverter : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(string))
            return "hello world";

        return base.ConvertTo(context, culture, value, destinationType);
    }
}