为了实现 ActiveX 控件的属性,需要在子控件类基础的 UserControl 的代码模块中添加属性过程。
按照缺省规定,控件仅仅具有容器提供的扩展属性。必须首先确定需要为控件增加哪些属性,然后添加代码来保存和提取这些属性的设置值。
控件的属性主要在以下两个方面区别于用 Visual Basic 创建的其它对象的属性。
这些差异导致的结果是,实现控件的属性比其它类型对象的属性具有更多的要求和选项。
上面列出的差异造成的严重后果是控件属性总应该用属性过程来实现,而不是公有数据成员。否则,控件在 Visual Basic 中将不会正常工作。
之所以需要用属性过程,是因为属性值的任何变化都必须通知 Visual Basic。为了做到这一点,需要在每次成功的 Property Let 或 Property Set 的尾部调用 UserControl 对象的 PropertyChanged 方法,如下面的代码片断所示。
Private mblnMasked As Boolean
Public Property Get Masked() As Boolean
Masked = mblnMasked
End Property
Public Property Let Masked(ByVal NewValue As Boolean)
mblnMasked = NewValue
PropertyChanged "Masked"
End Property
有两个原因决定需要通知 Visual Basic 属性值的改变:
只在运行时可用的属性不需要调用 PropertyChanged 方法,除非它们可以成为数据绑定的。然而,它们仍需要用属性过程来实现,详细内容请参阅相关主题“创建只在设计时或只在运行时的属性”。
详细信息 关于制作能够与数据源绑定的控件的详细内容,请参阅本章前面的“将控件绑定到数据源”。
如果创建属性 Get 和属性 Let,则您的属性将自动显示在属性窗口中。在某些情况下可不考虑这些。
例如,如果显示一个属性值需要消耗一段时间,则使用您的控件进行开发的开发人员可能会对访问属性窗口需要大量时间不满。
从工具菜单中可访问属性属性对话框,在该对话框上选定要压缩的属性。单击 Advanced 按钮,复选“不在属性浏览器中显示”,然后单击 Apply。
现在,制作者可以免除许多工作。因为控件所在的容器提供的扩展对象将提供很多属性。DragIcon、HelpContextID、TabIndex、Top 和 Visible 就是 Visual Basic 窗体提供的一部分扩展属性。
详细信息 要查阅 Visual Basic 的扩展对象提供的所有属性的详细信息,请在《联机手册》索引的《语言参考》中检索扩展对象。关于扩展对象的详细内容,请参阅本章前面的“理解容器的扩展对象”。Enabled 属性是一个奇怪的例外,制作者必须要实现它,以便使扩展对象能够标记它。详细内容请参阅本章前面的“控件的激活与禁用”。
在下列的相关主题中讨论了创建控件属性的其它要求和选项:
详细信息 关于 UserControl 对象的详细信息,请参阅本章前面的“UserControl 对象”。关于创建对象属性的一般信息,例如使某属性成为对象的缺省属性,请参阅“部件设计的一般准则”中的“给类添加属性和方法”。