.NET TIPS

PropertyGridコントロールの表示内容をカスタマイズするには?

デジタルアドバンテージ 一色 政彦
2005/06/24

 「TIPS:PropertyGridコントロールを利用するには?」ではWindowsフォーム用のPropertyGridコントロールの基本的な使い方を紹介し、「TIPS:PropertyGridコントロールの外観をカスタマイズするには?」ではPropertyGridコントロールの外観のカスタマイズ方法(背景色やフォント・サイズの変更など)について説明した。

 本稿では、PropertyGridコントロールのグリッド領域や説明領域の内容をカスタマイズする方法を紹介する。なお本稿は、Visual Studio .NET(以降、VS.NET)のIDEを利用することを前提としている。

PropertyGridコントロールの表示内容をカスタマイズする属性

 PropertyGridコントロールでの表示内容をカスタマイズするには、PropertyGridコントロールに指定するオブジェクトのクラスで実装しているプロパティに対して、次の表に示す属性を追加すればよい。

属性(指定するデータ型) カスタマイズ内容
DefaultProperty属性("文字列") クラスの「既定のプロパティ」を指定する。この属性は、以降で説明する属性とは異なり、プロパティ自体ではなく、クラスに指定する必要がある。この属性で指定されたプロパティは、PropertyGridコントロールが表示されるときに最初にフォーカスが設定される
DefaultValue属性("文字列") プロパティの「既定の値」を指定する(文字列値のほかにもObject型の値なども指定できる)。この属性に指定された文字列値は、PropertyGridコントロールでプロパティの既定の値として用いられる。ちなみにPropertyGridコントロールで既定値以外の値が指定されると、その値は太字で表示される
ReadOnly属性(Boolean値) プロパティの「読み取り専用」を指定する。この属性をTrueに指定されたプロパティは、PropertyGridコントロールで編集することができなくなる。ただし、この属性により読み取り専用に指定されても、コードからsetアクセサを用いてプロパティを編集することは可能である
Browsable属性(Boolean値) プロパティの「参照可能」を指定する。この属性をFalseに指定されたプロパティは、PropertyGridコントロールに表示されなくなる
Description属性("文字列") プロパティの「概要説明」を指定する。この属性に指定された文字列値は、PropertyGridコントロールでプロパティが選択されたときに、コントロールの説明領域に表示される
Category属性("文字列") プロパティの「カテゴリ」を指定する。この属性に指定された文字列値は、PropertyGridコントロールでプロパティのカテゴリ名として用いられる。既存のカテゴリ名を指定することで、同じカテゴリ内にプロパティをまとめたり、分類したりすることができる
PropertyGridコントロールの表示内容をカスタマイズするための主な属性群
「○○属性」と書かれているものは、正式には「○○Attributeクラス」のことである。属性クラスの語尾にある「Attribute」はコーディング時には省略することができるが、実際にはコンパイラがコンパイル時に「Attribute」を自動的に付加している。

 次のコードは、上の表にある属性を実際にプロパティに対して利用している(このコードは、「TIPS:PropertyGridコントロールを利用するには?」で掲載したコードに、さらにプロパティや属性などを追加したものである)。

using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;

namespace WindowsApplication1
{
  [DefaultProperty("DefaultProperty")]
  public class AppSettings
  {
    private FormWindowState myWindowState;
    private Color myBackColor;

    public AppSettings()
    {
      myWindowState = FormWindowState.Normal;
      myBackColor = SystemColors.Window;
    }

    public int DefaultProperty
    {
      get { return 0; } set { }
    }

    [DefaultValue((object)FormWindowState.Normal)]
    public FormWindowState DefaultValueProperty
    {
      get  { return myWindowState; }
      set  { myWindowState = value; }
    }

    [ReadOnly(true)]
    public int ReadOnlyProperty
    {
      get { return 0; } set { }
    }

    [Browsable(false)]
    public int BrowsableProperty
    {
      get { return 0; } set { }
    }

    [Description("説明領域に書き込めます。")]
    public int DescriptionProperty
    {
      get { return 0; } set {  }
    }

    [Category("新規カテゴリ")]
    public int CategoryProperty
    {
      get { return 0; } set {  }
    }
  }
}
属性指定によりPropertyGridコントロールの表示内容をカスタマイズするサンプル・コード(C#)
 
Imports System.ComponentModel

<DefaultProperty("DefaultProperty")> _

Public Class AppSettings
  Private myWindowState As FormWindowState
  Private myBackColor As Color

  Public Sub New()
    myWindowState = FormWindowState.Normal
    myBackColor = SystemColors.Window
  End Sub

  Public Property DefaultProperty() As Integer
    Get
      Return 0
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  <DefaultValue(FormWindowState.Normal)> _
  Public Property DefaultValueProperty() As FormWindowState
    Get
      Return myWindowState
    End Get
    Set(ByVal Value As FormWindowState)
      myWindowState = Value
    End Set
  End Property

  <ReadOnlyAttribute(True)> _
  Public Property ReadOnlyProperty() As Integer
    Get
      Return 0
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  <Browsable(False)> _

  Public Property BrowsableProperty() As Integer
    Get
      Return 0
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  <Description("説明領域に書き込めます。")> _
  Public Property DescriptionProperty() As Integer
    Get
      Return 0
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  <Category("新規カテゴリ")> _
  Public Property CategoryProperty() As Integer
    Get
      Return 0
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property
End Class
属性指定によりPropertyGridコントロールの表示内容をカスタマイズするサンプル・コード(VB.NET)

 なおプロパティへの属性の指定は、上のコードのように1つだけでなく、次のように複数連ねて記述することもできる。

[Description("説明領域に書き込めます。"), Category("新規カテゴリ")]
public int DescriptionAndCategoryProperty
<Description("説明領域に書き込めます。"), Category("新規カテゴリ")> _
Public Property DescriptionAndCategoryProperty() As Integer
複数連ねて記述した属性の指定(上:C#、下:VB.NET)

 上記のサンプル・コードを実際に実行したのが、次の画面である。

PropertyGridコントロールの表示内容をカスタマイズした結果
前述の属性群を利用することで、このようにPropertyGridコントロールの表示内容をカスタマイズできる。なお、BrowsablePropertyプロパティは、Browsable属性を指定したために、この画面には表示されていない。
  DefaultValue属性で指定したプロパティの「既定値」と、コントロールで指定されている値が等しいときは通常の文字で表示され、それ以外のときは太字で表示される。この例では既定値の「Normal」と等しい値が設定されているため、通常の文字で表示されている。
  ReadOnly属性を指定したプロパティは、グレー表示される。
  DefaultProperty属性で指定されたプロパティには、PropertyGridコントロールで表示されたときに最初に自動的に選択される。
  プロパティに対してDescription属性を指定すると、その項目が選択されたときに、指定された文字列(この例では「説明領域に書き込めます。」)がPropertyGridコントロールの説明領域に表示される。
  Category属性を指定した場合、指定したカテゴリ(この例では「新規カテゴリ」)にプロパティが分類される。

 以上がPropertyGridコントロールのプロパティの表示内容をカスタマイズする方法だ。しかしこの属性指定だけでは、ホット・コマンド領域やツールバー領域の表示をカスタマイズすることはできない。それらをカスタマイズする方法については、後日あらためて紹介したい。End of Article

カテゴリ:Windowsフォーム 処理対象:PropertyGridコントロール
使用ライブラリ:PropertyGridクラス(System.Windows.Forms名前空間)
使用ライブラリ:DefaultProperty属性(System.ComponentModel名前空間)
使用ライブラリ:DefaultValue属性(System.ComponentModel名前空間)
使用ライブラリ:ReadOnly属性(System.ComponentModel名前空間)
使用ライブラリ:Browsable属性(System.ComponentModel名前空間)
使用ライブラリ:Description属性(System.ComponentModel名前空間)
Category属性(System.ComponentModel名前空間)
関連TIPS:PropertyGridコントロールを利用するには?
関連TIPS:PropertyGridコントロールの外観をカスタマイズするには?
 
この記事と関連性の高い別の.NET TIPS
PropertyGridコントロールの外観をカスタマイズするには?
PropertyGridコントロールを利用するには?
PropertyGridコントロールのプロパティ変更時に処理を行うには?
PropertyGridコントロールに表示されるプロパティ名を変更するには?
[ASP.NET]DataGridコントロールのページ移動ボタンをカスタマイズするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間