かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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をコレクションにぶちこんで返せば自由に項目を足したり出来る。
幸せ。


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