拡張プロバイダの概要
更新 : 2007 年 11 月
拡張プロバイダは、他のコンポーネントにプロパティを提供するコンポーネントです。たとえば、フォームに ToolTip コンポーネント (Windows フォーム) を追加すると、そのフォーム上の各コントロールに ToolTip というプロパティが提供されます。この ToolTip プロパティは、アタッチされた PropertyGrid コントロールがある場合、そこに表示されます。デザイン時に、このプロパティの値を設定できます。
拡張プロバイダによって提供されるプロパティは、実際には拡張プロバイダ オブジェクト自体の中に存在するため、修飾されるコンポーネントの真のプロパティではありません。デザイン時には、修飾されるコンポーネントにアタッチされた任意の PropertyGrid にこのプロパティが表示されます。しかし、実行時には、修飾されるコンポーネントからこのプロパティにアクセスすることはできません。代わりに、ToolTip コンポーネントで GetToolTip メソッドを呼び出します。
実装
拡張プロバイダを実装するために必要な手順を次に示します。
ProvidePropertyAttribute 属性を使用して、拡張プロバイダから提供されるプロパティを指定する。
提供されたプロパティを実装する。
提供されたプロパティをどのコントロールが受け取るかを追跡する。
IExtenderProvider インターフェイスを実装する。
詳細については、「方法 : 拡張プロバイダを実装する」を参照してください。完全な例については、「方法 : HelpLabel 拡張プロバイダを実装する」を参照してください。
ProvideProperty 属性
拡張プロバイダはクラスであるため、独自のプロパティおよびメソッドを持ちます。特定のプロパティを他のコンポーネントに提供するプロパティとして指定するには、クラス レベルで ProvidePropertyAttribute 属性を適用します。この属性には、提供するプロパティの名前と、そのプロパティを提供できるオブジェクトの種類を指定します。
提供されるプロパティの実装
規則により、提供されるプロパティはプロパティとしては実装されず、メソッドのペアとして実装されます。このようなメソッドには、GetPropertyName および SetPropertyName という名前を使用する必要があります。たとえば、拡張プロバイダの実装により、DemoText という名前のプロパティが提供される場合、メソッドには GetDemoText および SetDemoText という名前を付けます。
これらのメソッドは単一の Component パラメータを使用して、各プロパティ値が割り当てられるコンポーネントを追跡できます。
提供されるプロパティを受け取るコントロールの追跡
提供されるプロパティを実装するには、各コンポーネントのプロパティ値を記録および取得するために IDictionary などのコレクション オブジェクトを使用する必要があります。
たとえば、コンポーネントのインスタンスを DictionaryEntry に対する Key として使用し、プロパティの値を DictionaryEntry の Value として使用できます。GetPropertyName メソッドが呼び出されたら、実装では、指定されたコンポーネントに対応するプロパティ値をコレクションに問い合わせることができます。
IExtenderProvider インターフェイスの実装
各エクステンダ クラスは、IExtenderProvider インターフェイスを実装する必要があります。このインターフェイスは、CanExtend という 1 つのメソッドから構成されています。このメソッドはブール値を返して、コンポーネントが拡張対象かどうかをデザイナに示します。
拡張プロバイダは任意のコンポーネントにプロパティを提供できますが、一般にその実装には、特定の種類のコンポーネントに対してだけプロバイダを使用できるようにする機能が含まれます。たとえば、コントロールだけにプロパティを提供するエクステンダを作成するとします。CanExtend メソッドを実装すると、この制約を適用できます。