如何:实现扩展程序提供程序
扩展程序提供程序可以将属性添加到控件。ActiveX 控件也使用扩展程序提供程序的概念,但它们需要特殊的编程语言支持。在 .NET Framework 中,扩展程序提供程序不需要特殊支持。在源代码中,扩展程序提供程序属性存在于扩展程序提供程序对象上。在其他对象中设置属性值需要两条信息:要设置值的对象和新的属性值。例如,Windows 窗体具有 ToolTip 组件,该组件为其他控件提供扩展程序属性。它在其他对象上设置的属性是表示 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 {...}
尽管扩展程序提供程序可以为任何组件提供属性,但实现包括的功能通常使其只能用于特定类别的组件。
有关完整示例,请参见 如何:实现 HelpLabel 扩展程序提供程序。