.NET TIPS

PropertyGridコントロールのプロパティ変更時に処理を行うには?

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

 「TIPS:PropertyGridコントロールを利用するには?」では、PropertyGridコントロールの基本的な使い方を紹介した。本稿では、その応用的な実装として、PropertyGridコントロールによりプロパティの値が変更されたときに何らかの処理を実行する方法を紹介する。なお本稿ではVisual Studio .NETを用いて開発することを前提とする。

●PropertyValueChangedイベント・ハンドラの追加

 プロパティの値が変更されたときに処理を行うには、PropertyGridコントロールのPropertyValueChangedイベントを受け取る必要がある。このPropertyValueChangedイベントは、PropertyGridコントロール上でプロパティ値が変更されたときに発生するイベントだ。

 具体的には、次の画面の手順でPropertyValueChangedイベント・ハンドラを追加して、そのイベント・ハンドラ内に処理を記述する。

Visual Studio .NETでのPropertyValueChangedイベント・ハンドラの追加手順(C#の場合)
プロパティの値が変更されたときに何らかの処理を行うために、PropertyValueChangedイベント・ハンドラを追加しているところ。
  Windowsフォーム・デザイナのフォーム上に配置したPropertyGridコントロールをクリックして選択する。
  [プロパティ]ウィンドウの[イベント]ボタンをクリックして、イベントのリストを表示する。
  イベントのリストの中から「PropertyValueChanged」を探し出し、それをダブルクリックする。これにより、PropertyValueChangedイベント・ハンドラ(本稿の例では「propertyGrid1_PropertyValueChanged」というメソッド)が追加される。
 
Visual Studio .NETでのPropertyValueChangedイベント・ハンドラの追加手順(VB.NETの場合)
プロパティの値を変更したときに何らかの処理を行うために、PropertyValueChangedイベント・ハンドラを追加しているところ。
  フォームをコード・エディタで開き、その上部にあるナビゲーション・バーの左側のコンボボックスからPropertyGridコントロール(本稿の例では「propertyGrid1」)を選択する。
  ナビゲーション・バーの右側のコンボボックスから「PropertyValueChanged」を探し出し、それをダブルクリックする。
  これにより、PropertyValueChangedイベント・ハンドラ(本稿の例では「propertyGrid1_PropertyValueChanged」というメソッド)が追加される。

●PropertyValueChangedイベント・ハンドラの処理

 後は上記の手順で追加されたPropertyValueChangedイベント・ハンドラの中に、必要な処理を記述すればよい。

 例えば本稿では、前掲のTIPSのサンプル・プログラムにPropertyValueChangedイベント・ハンドラを追加して、そのイベント・ハンドラ内に次のようなコードを記述した。このコードでは、PropertyGridコントロールで変更された背景色やウィンドウ状態を取得し、新しい値をフォームのプロパティに反映する。

private void propertyGrid1_PropertyValueChanged(object s, System.Windows.Forms.PropertyValueChangedEventArgs e)
{
  // プロパティの名前を取得する
  string propertyName = e.ChangedItem.PropertyDescriptor.Name;

  // プロパティの値を取得する
  switch (propertyName)
  {
    case "BackColor":
      this.BackColor = (Color)e.ChangedItem.Value;
      break;
    case "WindowState":
      this.WindowState = (FormWindowState)e.ChangedItem.Value;
      break;
  }
}
PropertyValueChangedイベント・ハンドラの処理(C#)
 
Private Sub propertyGrid1_PropertyValueChanged(ByVal s As Object, ByVal e As System.Windows.Forms.PropertyValueChangedEventArgs) Handles propertyGrid1.PropertyValueChanged
  ' プロパティの名前を取得する
  Dim propertyName As String = e.ChangedItem.PropertyDescriptor.Name

  ' プロパティの値を取得する
  Select Case propertyName
    Case "BackColor"
      Me.BackColor = CType(e.ChangedItem.Value, Color)
    Case "WindowState"
      Me.WindowState = CType(e.ChangedItem.Value, FormWindowState)
  End Select
End Sub
PropertyValueChangedイベント・ハンドラの処理(VB.NET)

 PropertyValueChangedイベント・ハンドラでは、パラメータにより引き渡されるPropertyValueChangedEventArgsオブジェクト(System.Windows.Forms名前空間。本稿の例では「e」)のChangedItemプロパティにより、変更されたプロパティ項目であるGridItemオブジェクト(System.Windows.Forms名前空間)を取得できる。GridItemオブジェクトは、PropertyGridコントロールの1行を実装するためのものだ。

 上記のコードでは、そのGridItemオブジェクトのPropertyDescriptor.Nameプロパティによりプロパティの名前を取得し、GridItemオブジェクトのValueプロパティにより現在設定されているプロパティの値を取得している。なお、GridItemオブジェクトのPropertyDescriptorプロパティには、PropertyDescriptorクラス(System.ComponentModel名前空間)のオブジェクトが設定されている。これは、プロパティの説明(=情報)を提供するためのものだ。つまり、PropertyDescriptor.Nameというプロパティは、プロパティの説明に関するオブジェクトからName(名前)という情報を取得しているわけである。

 そして、取得したプロパティ名(“BackColor”か、“WindowState”か)に従って条件分岐し、それぞれ適切なフォームのプロパティに新しいプロパティ値を設定している。つまり、PropertyGridコントロールの“BackColor”プロパティが変更されればフォームのBackColorプロパティを、“WindowState”プロパティが変更されればフォームのWindowStateプロパティを即座に設定している。

 このため、アプリケーションを実行して、例えばBackColorプロパティの項目の値を変更すれば、フォームは次の画面のようになる。

PropertyValueChangedイベント処理を行うサンプル・プログラムの実行結果
前掲の「TIPS:PropertyGridコントロールを利用するには?」のサンプル・プログラムに、PropertyValueChangedイベント処理を追加して、前述のサンプル・コードを記述したサンプル・プログラムを実行したところ。
  PropertyGridコントロールのBackColorプロパティを「Green」に変更する。なおこの画面では、色一覧が表示されているが、これはBackColorプロパティがColor型のためである。Color型のプロパティは、デフォルトでこのような色一覧が表示されるようになっている。
  すると、すぐにフォームの背景色(=BackColorプロパティ)が変更される。

 このように、PropertyGridコントロールのPropertyValueChangedイベントを利用することで、プロパティの変更に合わせた動的な処理を実行することが可能になる。End of Article

カテゴリ:Windowsフォーム 処理対象:PropertyGridコントロール
使用ライブラリ:PropertyGridクラス(System.Windows.Forms名前空間)
使用ライブラリ:PropertyValueChangedEventArgsクラス(System.Windows.Forms名前空間)
使用ライブラリ:GridItemクラス(System.Windows.Forms名前空間)
使用ライブラリ:PropertyDescriptorクラス(System.ComponentModel名前空間)
関連TIPS:PropertyGridコントロールを利用するには?
 
この記事と関連性の高い別の.NET TIPS
PropertyGridコントロールを利用するには?
PropertyGridコントロールの表示内容をカスタマイズするには?
PropertyGridコントロールの外観をカスタマイズするには?
PropertyGridコントロールに表示されるプロパティ名を変更するには?
[ASP.NET]GridViewコントロールにコマンド・ボタンを配置するには?(応用編)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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 記事ランキング

本日 月間