应该提供的属性

建议提供的属性包括 Appearance、BackColor、BackStyle、BorderStyle、Enabled、Font 和 ForeColor。实现控件上比较常见的属性是个好主意,该控件提供了与您的控件相似的功能。

另外,可以根据需要有选择地实现 UserControl 对象的某些子控件的属性,如本章前面的“显露子控件属性”中所述。

以上列出的所有属性必须使用适当的数据类型或枚举,如相关主题“使用标准控件属性类型”和“显露子控件属性”中所述。

注意 如果准备制作的控件由子控件来提供外观,那么实现 Appearance 属性会有问题。对于大部分控件,Appearance 属性仅在设计时是可用的,但只能委派给子控件的运行时属性。

标准属性的过程 ID

类型库中的每个属性或方法都具有一个标识数字,叫做过程 ID 或 DISPID。属性或方法既可以通过名称(后期约束),也可以通过 DISPID (前期约束)来访问。

一些很重要的属性或方法具有特殊的 DISPID,在 ActiveX 规格说明中进行了定义。这些标准过程 ID 被一些程序和系统函数用来访问控件的标准属性。

例如,有一个专门的过程 ID,用于为控件显示 About 框的方法。Visual Basic 会直接调用这个过程 ID,而不是查遍类型库来寻找名称为 AboutBox 的方法。属性的名称可以是任意的,但是它的的过程 ID 必须是正确的。

要为属性指派一个标准过程 ID,请按照以下步骤执行:

  1. 在“工具”菜单中,单击“过程属性”打开“过程属性”对话框。

  2. 在“名称”框中,选择该属性。

  3. 单击“高级”打开“过程属性”对话框。

  4. 在“过程标识符”框中,选择要分配给属性的过程 ID。如果所需的过程 ID 不在表中,在“过程标识符”框中输入它。

重点 在过程 ID 号框中选择“(None)”并不意味着该属性或方法没有过程 ID。这只是说还没有选择一个特殊的过程 ID。Visual Basic 会自动为标记了“(None)”的成员分配过程 ID。

一个顾客一个过程 ID

控件的一个属性或方法只能具有一个过程 ID,而且控件的两个属性或方法不能具有相同的过程 ID。

这就是说,控件部件中的每一控件都可以有缺省属性 (procedure ID=0),但是每个控件只能有一个属性具有该过程 ID。

如果为两个不同的成员分配相同的过程 ID,那么只有在类型库中较前面的那一个可以被访问。另一个就好象不存在一样。

感兴趣的过程 ID

如果有标准过程 ID 的话,那么为属性指派标准过程 ID 总是个好主意。“过程属性”对话框中列出了过程 ID,并显示了通常与其关联的属性名。您将发现下面这些过程 ID,特别有:

AboutBox

允许指定一个方法,用于为控件显示““关于”对话框”,请参阅本章前面的“为控件添加 About Box”。没有特定的方法名与此 ID 关联。

Caption,Text

这两个过程 ID 都可以指派给“属性”窗口行为与 Visual Basic 内在控件的 Caption 和 Text 属性类似的属性。即,当有值键入“属性”窗口时,新值会立即反映在控件上。

这意味着,输入的每次击键都将调用 Property Let 过程,每次接收一个全新的值。

指派的这些标识号的属性不必叫做 Caption 或 Text,尽管那些属性需要此过程 ID 支持的功能。

(Default)

控件的缺省属性是在未指定属性时可以访问的属性。例如,如下代码把字符串“Struthiomimus”赋给 Label1 的(缺省)Caption 属性:

   Label1 = "Struthiomimus"

Enabled

该过程 ID 必须分配给控件的 Enabled 属性,从而使它的允许/禁止状态与其它控件一致。关于这个的详细内容,请参阅本章前面的“使控件被允许或禁止”。

详细信息 控件制作者会感兴趣的其它过程 ID 列在“过程属性”对话框的“过程标识符”框中。要得到 DISPID 的完整列表,请查阅 ActiveX 规格说明。

提供有用的缺省值

如果实现的属性与某个标准环境属性的名称相同,例如 BackColor、Font、和 ForeColor,就应当考虑 AmbientProperties 对象的对应属性值是否可以作为有用的缺省值。

从以下示例可以看出,改变某个 Visual Basic 窗体上的字体大小,然后添加一个标签或命令按钮,新控件会使用窗体的当前字体设置值作为其缺省的字体设置值。大部分的内在控件都具有类似的行为。

如果要制作复选框、选项按钮或标签,则应该使控件的缺省 BackColor 设置与 Ambient.BackColor 一致,这将是有用的。

显然,这需要考虑控件将如何使用。例如,在文本框上,使 Font 属性与环境属性一致比较好,而 BackColor 属性则不适合这样做。

详细信息 请参阅本章前面的“使用环境对象与容器保持一致”。

使用 ActiveX 控件接口向导

“ActiveX 控件接口向导”可以帮助确定应该提供什么属性,以及如何委派合适的子控件。

把需要使用的所有子控件都放置到 UserControl 上以后,启动向导并选择控件。向导将检查子控件,并产生一份属性、方法和事件的列表,其中包括了子控件的所有接口和 UserControl 对象接口中出现的,以及前面列出的标准属性。可以从该列表中选择需要用于控件接口的属性、方法和事件。

向导能够产生该控件的属性到 UserControl 对象或子控件属性的缺省映射。在以后的步骤中,可以改变这些映射。

在确定了控件接口并委派了现有属性之后,向导将生成实现这些属性的属性过程代码,为标准属性使用正确的数据类型,并为所有的属性映射添加委派代码,这就大大减少了生成功能完善的控件所需要的工作量。