方法 : 拡張プロバイダーを実装する
拡張プロバイダーは、プロパティを他のコントロールに追加できます。ActiveX コントロールにも拡張プロバイダーの概念が採用されていますが、ActiveX コントロールでは特別なプログラミング言語サポートが必要です。.NET Framework では、拡張プロバイダーを使用するために特別なサポートは必要ありません。ソース コードでは、拡張プロバイダー オブジェクトに拡張プロバイダー プロパティを指定します。別のオブジェクトのプロパティの値を設定する場合は、値を設定する対象のオブジェクトと、プロパティの新しい値の 2 種類の情報が必要です。たとえば Windows フォームには、他のコントロールにエクステンダー プロパティを提供する ToolTip コンポーネントがあります。このコンポーネントが他のオブジェクトに対して設定するプロパティは、マウス ポインターがコントロール上に配置されたときに表示されるツールヒント (ToolTip) の文字列です。ToolTip プロパティを設定する方法のコード例を次に示します。
tooltip1.SetToolTip(button1, "The tooltip text")
tooltip1.SetToolTip(button1, "The tooltip text");
このエクステンダー プロパティは、デザイン時には実際のエクステンダー オブジェクトではなく、拡張対象のオブジェクトのプロパティとしてプロパティ ブラウザーに表示されます。上の例では、ToolTip プロパティは tooltip1 ではなく button1 に表示されます。
拡張プロバイダーを実装するには
IExtenderProvider インターフェイスを実装するコンポーネントを定義します。
Public Class MyExtender Implements IExtenderProvider ... End Class
public class MyExtender : IExtenderProvider {...}
IExtenderProvider は次のように定義されます。
Public Interface IExtenderProvider Function CanExtend(ByVal extendee As Object) As Boolean End Interface
public interface IExtenderProvider { bool CanExtend(object extendee); }
拡張プロバイダーがプロパティを提供する対象の各コンポーネントまたはコントロールに対して true を返すように、CanExtend メソッドを実装します。
拡張プロバイダーが他のコンポーネントに提供するプロパティを定義します。これらのプロパティは、その適用先コンポーネントを指定するパラメーターを受け取るため、実際にはメソッドです。
拡張プロバイダー クラスは、ProvidePropertyAttribute でマークされている必要があります。ProvidePropertyAttribute のコンストラクターは、第 1 引数として追加するプロパティの名前を指定する文字列、第 2 引数としてプロパティを提供するオブジェクトの型という、2 つの引数を使用します。
<ProvideProperty("HelpText", GetType(IComponent))> _
Public Class MyExtender
Implements IExtenderProvider
...
End Class
[ProvideProperty("HelpText", typeof(IComponent))]
class MyExtender : IExtenderProvider {...}
拡張プロバイダーは任意のコンポーネントにプロパティを提供できますが、一般にその実装には、特定の種類のコンポーネントに対してだけプロバイダーを使用できるようにする機能が含まれます。
サンプル全体については、「方法 : HelpLabel 拡張プロバイダーを実装する」を参照してください。