純PropertyGridのDropDownListコントロール - ショーの値とは異なる戻り値

StackOverflow https://stackoverflow.com/questions/595140

質問

私は、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を格納したいが、私はハッシュテーブルを使用してみてください...それはドロップダウンリストに名前のショーにしたいが、それは動作しませんです...

ところで - 私は、.NETのバージョン3.5を使用しますが、私はWinフォーム(ないWPF)を使用します。

役に立ちましたか?

解決

あなたはそのためのGetStandardValuesを使用することはできません。あなたはのは、1、5、10を言わせて、あなたのために整数値を制限しなければならなかった場合は、この方法は有用であろう。

あなたは、プロパティ値の文字列を表示したい場合は、

、あなたは自分のTypeConverterのをConvertToとConvertFromメソッドをオーバーライドする必要があります。 PropertyGridのドロップダウンリストで、変換後の文字列を使用します。

その内容が静的である場合は、

あなたのハッシュテーブルについて、あなたはあなたのTypeConverterでそれを保存することができます。それはダイナミックだ場合は、最高のは、グリッドのターゲット・インスタンスがそれを管理できるようにすることです。あなたのコンバータから、あなたはTypeDescriptorContext.Instanceプロパティを介してアクセスすることができます。

希望に役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top