[C#] プロパティエディタでクラスのプロパティを展開可能にするには

2009-10-29 22:00
このエントリーをはてなブックマークに追加

Visual Studio .NET のコントロールに、独自のクラス型のプロパティを持たせたとき、プロパティエディタで展開可能にする方法です。展開可能とは Font 型のプロパティのように、プロパティエディタで階層化されて表示・設定できるプロパティのことです。

値のセットを保持する単純なクラスであれば、以下の記述をクラスの宣言の前に付加するだけです。例えば Text と Visible という二つのプロパティをもつクラスを宣言する場合、以下のようになります。

[TypeConverter(typeof(ExpandableObjectConverter))]
public class HogeSetting {
    private bool visible = true;
    [DefaultValue(true)]
    public bool Visible {
        get { return visible; }
        set { visible = value; }
    }

    private string text;
    public bool Text {
        get { return text; }
        set { text = value; }
    }
}

これで HogeSetting をプロパティとして持つコンポーネントを作成すれば、プロパティエディタで展開可能になります。

    public class Hoge : Component 
    {
        private HogeSetting setting1;
        public HogeSetting Setting1
        {
            get { return setting1; }
            set { setting1 = value; }
        }

        private HogeSetting setting2;
        public HogeSetting Setting2
        {
            get { return setting2; }
            set { setting2 = value; }
        }

        public Hoge()
        {
            setting1 = new HogeSetting();
            setting2 = new HogeSetting();
        }
    }
展開可能なクラスをプロパティに設定したコンポーネントのサンプル

いろいろ調べると、TypeConverter 属性 に TypeConverter クラスから派生した独自の型コンバータを割り当てるような記事が多かったのですが、ExpandableObjectConverter を使うのが手っ取り早くて簡単です。独自の型コンバータを作成した方が文字列からの変換などもできてるようになりますが、実装するのは結構大変なので割愛します。実装したい方は以下の MSDN の資料が参考になります。

  • ブックマーク : アクセス: 31,395回
  • カテゴリー : C#
  • キーワード :

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

33 queries. HTML convert time: 0.097 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン