次の方法で共有


拡張プロバイダ オブジェクト

更新 : 2007 年 11 月

拡張プロバイダは、他のコンポーネントにプロパティを提供するコンポーネントです。たとえば、フォームに ToolTip コンポーネント (Windows フォーム) を追加すると、そのフォーム上の各コントロールに ToolTip というプロパティが提供されます。[プロパティ] ウィンドウでは、各コントロールに ToolTip プロパティが表示され、開発者はデザイン時にこのプロパティの値を設定できます。

拡張プロバイダによって提供されるプロパティは、実際には拡張プロバイダ オブジェクト自体の中に存在するため、修飾されるコンポーネントの真のプロパティではありません。デザイン時には、修飾されるコンポーネントの [プロパティ] ウィンドウにこのプロパティが表示されます。しかし、実行時には、修飾されるコンポーネントを通してこのプロパティにアクセスすることはできません。次のコード例では、MyButton という名前のボタンと MyToolTip という名前の ToolTip コントロールを含むフォームが作成され、このコントロールによって ToolTip プロパティが提供されます。

' This is an example of code that is NOT CORRECT!
Dim myString as String
myString = MyButton.ToolTip
// This is an example of code that is NOT CORRECT!
string myString;
myString = MyButton.ToolTip;

ToolTip プロパティは実際には MyToolTip によって提供されており、コンパイルはこのプロパティを MyButton のプロパティとして認識しないため、この構文ではコンパイル エラーが発生します。このプロパティに正しくアクセスする方法の例を次に示します。

Dim myString as String
myString = MyToolTip.GetToolTip(MyButton)
string myString;
myString = MyToolTip.GetToolTip(MyButton);

拡張プロバイダはクラスであるため、独自のプロパティおよびメソッドを持つことができます。特定のプロパティを他のコンポーネントに提供されるプロパティとして指定するには、クラス レベルで ProvidePropertyAttribute 属性を適用します。この属性には、提供するプロパティの名前と、そのプロパティを提供できるオブジェクトの種類を指定します。規則により、提供するプロパティはプロパティとしては実装されず、メソッドのペアとして実装されます。これらのメソッドには、提供するプロパティの名前の先頭に "Get" および "Set" を追加した名前を指定します。次に例を示します。

Imports System.ComponentModel
<ProvideProperty("MyText", GetType(Control))> Public Class MyExtender
   <ExtenderProvidedProperty()> Public Function GetMyText(acontrol as _
      Control) as String
      ' Insert code to implement function.
   End Function
   Public Sub SetMytext (acontrol as Control)
      ' Insert code to implement function.
   End Function
End Class
using System.ComponentModel;
[ProvideProperty("MyText", typeof("Control"))]
public class MyExtender
{
[ExtenderProvidedProperty()]
   public string GetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
   public void SetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
}

提供されるプロパティを実装するには、各コントロールのプロパティ値を記録および取得するために Hashtable などのコレクション オブジェクトを使用する必要があります。詳細については、「方法 : 拡張プロバイダを実装する」を参照してください。

各エクステンダ クラスは、IExtenderProvider インターフェイスも実装する必要があります。このインターフェイスは、CanExtend という 1 つのメソッドから構成されています。このメソッドはブール値を返して、コンポーネントが拡張対象かどうかをデザイナに示します。たとえば、コントロールだけにプロパティを提供するエクステンダを作成するとします。CanExtend メソッドを実装する方法の例を次に示します。

Imports System.ComponentModel
Public Function CanExtend(ByVal extendee As Object) As Boolean _
   Implements IExtenderProvider.CanExtend
   If Typeof extendee Is Control Then
      Return True
   Else
      Return False
   End If
End Function
public bool CanExtend(object extendee) 
{
   if (extendee is Control)
      return true;
   else
      return false;
}

参照

処理手順

方法 : 拡張プロバイダを実装する

方法 : HelpLabel 拡張プロバイダを実装する

参照

IExtenderProvider

ProvidePropertyAttribute

その他の技術情報

拡張プロバイダ