かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

PropertyGridに新しいTabをつけよう

PropertyGridがデフォで用意してくれる見た目は素敵。
でも、これはSelectedObjectに設定されたオブジェクトのプロパティをそのまま見せてる(Attributeで見せ方をカスタマイズ可能)だけ。


ということで、Tabを1つ追加して自分の世界を作るぞ!
Tabを追加するの自体は簡単。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms.Design;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;

namespace Greet.Tab
{
    public class CustomTab : PropertyTab
    {
        /// <summary>
        /// プロパティ返す!
        /// </summary>
        public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes)
        {
            return new PropertyDescriptorCollection(new PropertyDescriptor[0]);
        }

        /// <summary>
        /// タブ名返す!
        /// </summary>
        public override string TabName
        {
            get
            {
                return "タブ名";
            }
        }

        /// <summary>
        /// アイコン返す!
        /// </summary>
        public override System.Drawing.Bitmap Bitmap
        {
            get
            {
                return new Bitmap(typeof(CustomTab), "TabIcon.bmp");
            }
        }
    }
}

PropertyTabを継承していくつかのメソッドをオーバーライドするだけ。
後は、属性でこのプロパティタブを使うように設定するだけ。

    [PropertyTab(typeof(CustomTab), PropertyTabScope.Component)]
    [DefaultProperty("Greets")]
    public partial class GreetControl : UserControl
    {
        // 略
    }

こんな具合。
PropertyTabAttributeの第二引数が何かは知らない(ぉ
イメージは出来るけど。


これで、何も表示されないタブの出来上がり!
CustomTabのGetPropertiesで自分で拡張したPropertyDescriptorをコレクションにぶちこんで返せば自由に項目を足したり出来る。
幸せ。


でも、あまり使わないと思うのでこれに関しては深追いしない。