ユーザー インターフェイス型エディターの概要

ユーザー インターフェイス (UI) 型エディターを実装すると、複雑なプロパティの型に対してカスタムのデザイン時の操作を提供できます。

カスタム型の表示および編集

カスタム型をプロパティとして公開する際に、PropertyGrid でプロパティの値を編集するには、次の 3 つの方法があります。

  • プロパティを文字列としてその場で編集できます。 これには、カスタム型の TypeConverter が必要です。 詳細については、「方法 : 型コンバーターを実装する」を参照してください。

  • プロパティをドロップダウン UI で編集できます。 これは、シングル クリックで設定できるプロパティの場合に特に便利です。

  • プロパティをモーダル ダイアログ ボックスで編集できます。 プロパティが特に複雑な場合、適切に編集するには完全なダイアログ ボックスが必要になることがあります。

シングル クリックまたはモーダル ダイアログ ボックスによる編集を有効にするには、UI 型エディターを実装して、PropertyGrid と対話する必要があります。

ドロップダウン エディター

ドロップダウン エディターは、シングル クリックで設定できる型にとって最適です。 たとえば、ドロップダウン エディターを使用して、PropertyGrid 内の Control クラスの Dock および BackColor プロパティを編集します。

ドロップダウン UI 型エディターにアクセスするには、PropertyGrid で選択したプロパティ エントリの隣に表示される矢印ボタン (Properties Window Down Arrow) をクリックします。 カスタム UI が PropertyGrid にアタッチされて表示されます。 ウィンドウは上部をプロパティ エントリの下部に合わせて配置され、幅はプロパティ エントリの幅と一致します。 ユーザーが選択した後、このエディター ウィンドウも閉じる必要があります。 実装は DropDownControl メソッドを呼び出して、UI 型エディター ウィンドウのデザイン環境での位置およびサイズを設定する必要があります。また、CloseDropDown メソッドを呼び出して、ウィンドウを閉じる必要があります。

モーダル ダイアログ エディター

モーダル エディターは、完全な対話形式の UI を必要とする型にとって便利です。 たとえば、TabControlTabPage コレクション エディターや、DataGridView コントロールの [列の編集] ダイアログ ボックスのようなコレクション エディターは、モーダル エディターです。

モーダル UI 型エディターにアクセスするには、PropertyGrid で選択したプロパティ エントリの隣に表示される省略記号ボタン () をクリックします。 モーダル ダイアログ ボックスが表示され、ユーザーは通常のダイアログ ボックスと同じように対話します。 実装は ShowDialog メソッドを呼び出して、ダイアログ ボックスのデザイン環境での位置およびサイズを設定する必要があります。

UI 型エディターの実装

カスタム UI 型エディターを実装するには、少なくとも次のタスクを実行する必要があります。

  • UITypeEditor から派生するクラスを定義します。

  • GetEditStyle メソッドをオーバーライドして、エディターが使用するエディター スタイルの種類を PropertyGrid に通知します。

  • EditValue メソッドをオーバーライドして、UI、ユーザー入力の処理、および値の割り当てを処理します。

次のタスクを実行すると、PropertyGrid に値の表示を描画する追加サポートを追加できます。

  • GetPaintValueSupported をオーバーライドして、エディターが値の形式の表示をサポートしていることを示します。

  • PaintValue をオーバーライドして、値の形式の表示を実装します。

  • エディターに初期化の動作を含める場合は、UITypeEditor コンストラクター メソッドをオーバーライドします。

注意

UI 型エディターは、System.Windows.Forms 名前空間の型を使用して実装されることがありますが、これは必須ではありません。.NET Framework の標準の UI 型エディターは UITypeEditor から派生します。

UITypeEditor クラスからの派生

カスタム UI 型エディターは、UITypeEditor クラスから派生する必要があります。 UI 型エディターに特別な初期化が必要な場合は、既定のコンストラクターを定義します。

GetEditStyle メソッドのオーバーライド

デザイナーでコンポーネントまたはコントロールを選択すると、選択したコンポーネントまたはコントロールのプロパティ値で [プロパティ] ウィンドウが再描画されます。 プロパティを選択するとき、デザイン環境にはプロパティ エントリの表示方法を決定する GetEditStyle メソッドが必要です。

オーバーライドは UITypeEditorEditStyle 列挙から値を返して、UI 型エディターの適切なスタイルと通信します。

UITypeEditorEditStyle の値に関連付けられている動作を次の表に示します。

メンバー名

[動作]

None

対話形式の UI コンポーネントを提供しません。 適切な TypeConverter を使用して、文字列エントリをプロパティ値に変換します。

DropDown

プロパティ エントリに下向き矢印ボタン (Properties Window Down Arrow) を表示します。 UI はドロップダウン ウィンドウでホストされます。

Modal

プロパティ エントリに省略記号ボタン () を表示します。 UI はモーダル ダイアログ ボックスです。

EditValue メソッドのオーバーライド

EditValue メソッドは、UI を表示し、プロパティの値としてユーザーが選択した値を設定します。

ドロップダウン エディター

ドロップダウン UI 型エディターの場合は、IWindowsFormsEditorService インターフェイスのサービス プロバイダーを問い合わせます。 このサービスは、UI の位置およびサイズ情報を提供します。 通常、UI は Control として実装されます。 EditValue の実装は、このコントロールのインスタンスを作成して現在のプロパティ値で初期化し、デザイン環境で実行するために DropDownControl メソッドに渡します。 ユーザーがプロパティの新しい値を選択すると、EditValue 実装は CloseDropDown を呼び出して UI を閉じます。 EditValue 実装からの戻り値は、PropertyGrid に表示される新しいプロパティ値です。

モーダル エディター

モーダル UI 型エディターの場合は、IWindowsFormsEditorService インターフェイスのサービス プロバイダーを問い合わせます。 このサービスは、ダイアログ ボックスの位置情報を提供します。 通常、UI は Form から派生したクラスとして実装されます。 EditValue の実装は、このフォームのインスタンスを作成して現在のプロパティ値で初期化し、デザイン環境で実行するために ShowDialog メソッドに渡します。 この呼び出しからの戻り値が OK の場合は、フォームから新しいプロパティ値を取得して、戻り値として使用します。 EditValue 実装からの戻り値は、PropertyGrid に表示される新しいプロパティ値です。

ITypeDescriptorContext パラメーター

EditValue メソッドは ITypeDescriptorContext パラメーターを受け取ります。これを使用すると、デザイン環境に関する文脈情報を問い合わせることができます。 このパラメーターを使用すると、次のメンバーにアクセスできます。

プロパティの値のグラフィカル表示

プロパティの値をグラフィカルに表示するには、PaintValue メソッドをオーバーライドします。 提供された PaintValueEventArgs パラメーターを使用すると、PropertyGrid のプロパティのエントリの左側にある小さな四角形の中に描画できます。

注意

グラフィカル表示は、PaintValueEventArgs パラメーターの Bounds プロパティで定義される境界内に維持するように注意してください。

GetPaintValueSupported メソッドをオーバーライドして true を返すことにより、UI 型エディターがその値のカスタム表示を描画したことをデザイン環境に警告します。

参照

処理手順

方法 : UI 型エディターを作成する

方法 : デザイン時機能を活用した Windows フォーム コントロールを作成する

関連項目

UITypeEditorEditStyle

IWindowsFormsEditorService

その他の技術情報

ユーザー インターフェイス型エディター