拡張プロバイダーの概要
拡張プロバイダーは、他のコンポーネントにプロパティを提供するコンポーネントです。たとえば、フォームに 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 メソッドを実装すると、この制約を適用できます。