HOW TO:實作擴充性提供者
擴充性提供者可以將屬性加入至控制項。ActiveX 控制項也採用擴充性提供者的概念,但它們需要特殊的程式設計語言支援。在 .NET Framework 中,擴充性提供者不需特殊支援。在原始程式碼中,擴充性提供者屬性存在於擴充性提供者物件。在另一個物件上設定屬性值時,需要二項資訊:要設定數值的物件和新的屬性值。例如,Windows Form 具有提供擴充項屬性給其他控制項的 ToolTip 元件。它在其他物件上設定的屬性為字串,以表示指標停留於控制項時出現的 [工具提示]。下列程式碼範例會示範如何設定 ToolTip 屬性。
tooltip1.SetToolTip(button1, "The tooltip text")
tooltip1.SetToolTip(button1, "The tooltip text");
在設計階段,擴充項屬性在屬性瀏覽器中顯示為它們所擴充物件 (而非實際的擴充項物件) 的屬性。前面的範例中,ToolTip 屬性是出現在 button1,而不在 tooltip1。
若要實作擴充性提供者
定義實作 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); }
實作 CanExtend 方法,以便傳回 true 給您的擴充項將提供屬性的每個元件或控制項。
定義屬性集合,您的擴充項可將它提供給其他元件。屬性其實是方法,因為它們接受額外參數,以指定將套用屬性的元件。
擴充性提供者類別必須以 ProvidePropertyAttribute 來標記。ProvidePropertyAttribute 的建構函式使用二個引數:一是指定要加入的屬性名稱的字串,二是要將屬性提供至的物件所屬型別。
<ProvideProperty("HelpText", GetType(IComponent))> _
Public Class MyExtender
Implements IExtenderProvider
...
End Class
[ProvideProperty("HelpText", typeof(IComponent))]
class MyExtender : IExtenderProvider {...}
雖然擴充性提供者可以提供屬性給任何元件,這實作基本上包括一些功能,因此只能用於特定類別的元件。
如需完整的範例,請參閱 HOW TO:實作 HelpLabel 擴充性提供者。