擴充性提供者概觀
「擴充性提供者」(Extender Provider) 是可提供屬性給其他元件的元件。例如,在表單上加入 ToolTip 元件時,它就會將名為 ToolTip 的屬性提供給該表單上的每一個控制項。ToolTip 屬性就會隨後顯示在任何附加的 PropertyGrid 控制項中。您可以在設計階段,為這個屬性設定值。
擴充性提供者所提供的屬性 (Property) 實際位於擴充性提供者物件本身,因此並不是所修改元件的真正屬性 (Property)。在設計階段,這個屬性會顯示在附加於正進行修改之元件的任何 PropertyGrid 中。但您無法在執行階段,透過元件本身存取這個屬性。而必須呼叫 ToolTip 元件上的 GetToolTip 方法。
實作
下列清單說明實作擴充性提供者的必要步驟:
使用 ProvidePropertyAttribute 屬性 (Attribute),指定由您的擴充性提供者所提供的屬性 (Property)
實作所提供的屬性
追蹤接收您所提供屬性的控制項
實作 IExtenderProvider 介面
如需詳細資訊,請參閱HOW TO:實作擴充性提供者。如需完整的範例,請參閱 HOW TO:實作 HelpLabel 擴充性提供者。
ProvideProperty 屬性
擴充性提供者是一種類別,因此本身也可以有屬性和方法。若要將屬性 (Property) 指定為要提供給其他元件的屬性 (Property),可在類別層級套用 ProvidePropertyAttribute 屬性 (Attribute)。這個屬性 (Attribute) 會指定所要提供之屬性的名稱以及提供該屬性的物件型別。
實作所提供的屬性
依照慣例,所提供的屬性並不是實作為屬性,而是實作為一組方法。您必須將這些方法命名為 GetPropertyName 及 SetPropertyName。例如,如果您的擴充性提供者實作提供名為 DemoText 的屬性,就要將方法命名為 GetDemoText 和 SetDemoText。
這些方法會採用單一的 Component 參數,讓您追蹤指定給各元件的屬性值。
追蹤接收所提供屬性的控制項
所提供屬性的實作需要 IDictionary 或一些其他集合物件 (Collection Object),以記錄及擷取各個元件的屬性值。
例如,您可以使用元件執行個體做為 DictionaryEntry 的 Key,並使用屬性值做為 DictionaryEntry 的 Value。呼叫 GetPropertyName 方法時,您的實作會查詢對應於特定元件的屬性值集合。
實作 IExtenderProvider 介面
每個擴充項 (Extender) 類別都必須實作 IExtenderProvider 介面。這個介面是由單一方法 CanExtend 組成,它會傳回 Boolean 值,並指示設計工具是否要擴充元件。
雖然擴充性提供者可以提供屬性給任何元件,這實作基本上包括一些功能,因此只能用於特定類別的元件。例如,您可能需要建立只將屬性 (Property) 提供給控制項的擴充項。CanExtend 方法的實作可以強制執行此條件約束。