我希望能够在PropertyGrid中显示一个下拉列表,显示一些“字符串”值,但返回“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;
    }
}

下面是在PropertyGrid控件我的类使用

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

就像你看到的,我想存储对象的ID,但是我想表明它在下拉列表的名字......我尝试使用哈希表,但它不工作...

顺便说一句 - 我使用的净3.5版本,但我只使用的WinForm(未WPF)

有帮助吗?

解决方案

您不能使用该GetStandardValues。如果你不得不限制您的整数值假设1,5和10这种方法将是有益的。

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

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

希望有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top