C# .Net PropertyGrid DropDownList-返回值与显示值不同

C# .Net PropertyGrid DropDownList-返回值与显示值不同,c#,.net,controls,propertygrid,C#,.net,Controls,Propertygrid,我希望能够在propertygrid中显示一个dropdownlist,它显示一些“字符串”值,但返回一个“int”值 例如,设置我得到了这个类: public class MyObjectOptions : StringConverter { public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; } publi

我希望能够在propertygrid中显示一个dropdownlist,它显示一些“字符串”值,但返回一个“int”值

例如,设置我得到了这个类:

public class MyObjectOptions : StringConverter
{
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        MyObjectCollection mm = new MyObjectCollection();

        List<String> names = new List<String>
        foreach (MyObject m in mm)
        {
            m.Id // Need to store this somewhere ...
            names.Add(m.Name);
        }

        return new StandardValuesCollection(name);
    }

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }
}
如你所见,我想存储对象的id,但我想在dropdownlist中显示它的名称。。。我尝试使用哈希表,但它不起作用


顺便说一句,我使用.Net的3.5版,但我只使用WinForm(不是WPF)。

您不能使用GetStandardValues。如果必须将整数值限制为1、5和10,则此方法将非常有用

如果要在属性值中显示字符串,只需重写TypeConverter的ConvertTo和ConvertFrom方法。PropertyGrid将使用下拉列表中转换的字符串

关于哈希表,如果其内容是静态的,则可以将其存储在TypeConverter中。如果是动态的,最好让网格的目标实例来管理它。从转换器中,您可以通过TypeDescriptorContext.Instance属性访问它

希望有帮助

public class MyObjectProperty
{
    [TypeConverter(typeof(MyObjectOptions))]
    public int Id
    {
        get { return this.id; }
        set { this.id = value; }
    }
}