次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

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

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

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

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

ドロップダウン エディタ

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

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

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

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

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

UI 型エディタの実装

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

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

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

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

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

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

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

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

ms171839.alert_note(ja-jp,VS.90).gifメモ :

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

UITypeEditor クラスからの派生

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

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

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

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

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

メンバ名

動作

None

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

DropDown

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

Modal

プロパティ エントリに省略記号ボタン (VisualStudioEllipsesButton スクリーンショット) を表示します。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 のプロパティのエントリの左側にある小さな四角形の中に描画できます。

ms171839.alert_note(ja-jp,VS.90).gifメモ :

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

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

参照

処理手順

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

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

参照

UITypeEditorEditStyle

IWindowsFormsEditorService

その他の技術情報

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