使用属性过程所创建的一些简单属性将自动显示在 Visual Basic 的属性窗口中。 也可以使控件和属性页相连接,属性页以另一种格式显示控件的各种属性。
与控件连接的每一个属性页都成为选项卡化的“属性”对话框上的一个选项卡。 Visual Basic 处理选项卡化对话框所说明的页面的所有细节,并管理“确定”、“取消”和“应用”等按钮。 用户必须做的全部事情就是设计将用于设置属性值的控件。
当一组属性以复杂的方式相互作用时,正如 Visual Basic 包含的 Toolbar 控件的情况,属性页就十分有用。 对于将在各国发布的控件来说属性页也很有用,因为针对不同语言可将标题本地化。 属性页也使控件能够和没有 Properties 窗口的开发工具一起使用。
注意 本主题是演示创建示例性 ActiveX 控件一系列步骤中的一部分。 它从创建 ActiveX 控件的主题开始。
要向工程添加属性页,请按照以下步骤执行:
在使用标题时,这个标题就是出现在属性页选项卡上的标题。
为什么要命名页 SLGeneral 而不是通用?在一个工程中可以有几个控件,而每一个控件可以有一个通用页。这就是 ShapeLabel 控件的通用页。
| 文件 | 文件名 | 扩展 | |
| 属性页 | ControlDemo_SLGeneral | .pag | |
属性页中象位图之类的二进制信息都被保存在名称相同的二进制文件中,该文件的扩展名为 .pgx。
除了设计器的标题栏显示的是属性页的“标题”属性而不是以“名称”属性,属性页设计器看上去很像控件设计器。
要设计 ShapeLabel 控件的通用属性页
| 属性 | 值 | |
| 名字 | txtCaption | |
| 文本 | <空> | |
此属性页应有如下所示的外观:

按照这种方式把属性描述选项卡放在文本框之上,使其它语言访问控件部件更加容易,“标题”这个字所在之处可能更长或更短。 “建立 ActiveX 控件”将讨论如何确定控件位置的细节。
Private Sub PropertyPage_SelectionChanged() '在当前选择的控件列表中'显示第一个控件的标题。txtCaption.Text = SelectedControls(0).CaptionEnd Sub
本事件的目的是从 ShapeLabel 控件或当前所选择的某个或某些控件中取得已存在的属性值。这样做是正确的,可能有多个 ShapeLabel 控件被选。多个选择对控件用户来说是重要的事情,但这意味着要多做一些工作。
无论何时打开属性页均接收一个 SelectionChanged 事件。 选择控件列表改变时也接收这个事件。 这是必须的,因为“属性页”对话框为非模式对话框,当对话框打开时用户可能选择其他的一些控件。
必须在按属性逐个进行的基础上决定如何处理多重选择。 例如,如果属性页显示的是 SelectedControls 集合中第一个控件的 Width 属性,即 SelectedControls(0),如以上代码所示,它就能很容易的把所有选择控件的宽度改变为那个值。
从另一方面而言,把窗体中所有 ShapeLabel 控件的标题设置成相同值的操作并没有太大的用处,那样的话如果 SelectedControls 集合的 Count 属性大于一时则与 Caption 属性有关的逻辑处理将会使 txtCaption 无效。
然而这个过程不作逻辑处理。为了说明起见,将允许属性页设置多重标题。 以后若想让上面描述的行为生效,可把下列代码行添加到 PropertyPage_SelectionChanged 事件过程中:
'请不要这样做!If SelectedControls.Count > 1 ThentxtCaption.Enabled = FalseElsetxtCaption.Enabled = TrueEnd If
Private Sub PropertyPage_ApplyChanges() '在选择一个以上控件类的情况下,'使用一般性对象变量。Dim objControl As VariantFor Each objControl In SelectedControlsobjControl.Caption = txtCaption.TextNextEnd Sub
单击“属性页”对话框的“应用”或“确定”按钮,或者切换到其它选项卡时,属性页将接收 ApplyChanges 事件。
怎样得知 SelectedControls 中的各个控件是否具有 Caption 属性呢?作为控件部件的设计器来说,要确定哪些属性页与某一给定的控件相连接。 如果所有当前选择的控件的 Property Pages 清单中都具有某一页,则该属性页出现。 最容易做的事就是确保分配给每个控件的那些页不显示该控件所不具有的属性。
倘若希望一些控件使用一个通用属性页,其中一些控件又不具有该页出现的所有属性时,可以给 ApplyChanges 事件添加代码,以进行控件类型的检测并提供适当的属性值。 作为一种替代,也可使用 On Error 语句捕获和忽略来自不具有该属性控件的一些错误。
仅需要考虑自己部件中的那些控件,因为不在自己部件中的那些控件决不会使用本部件的属性页。
“创建 ActiveX 控件的属性页”将会很详细地讨论属性页的布局和赋值。
Private Sub txtCaption_Change() '属性页中被改变的'属性控制Property Pages'对话框的“应用”按钮。Changed = TrueEnd Sub
要将属性页和ShapeLabel控件相连接,请按照以下步骤执行:

Connect Property Pages 对话框可用于将多个属性页与一个控件相连接、并可为控件安排“连接属性页”对话框中各选项卡的显示顺序。
运行时也能连接属性页。 这将在“创建 ActiveX 控件的属性页”中讨论。

注意 按下“确定”键也可改变该标题,但那样会关闭“属性页”对话框。对话框应保持打开状态以便进行下一步。
可能希望试一试把诸如命令按钮之类的其它控件添加到 Form1 中,并且观察在“属性页”对话框上作不同复选的效果。
详细信息 “创建 ActiveX 控件的属性页”将详细讨论属性页。
本主题是演示创建示例性 ActiveX 控件一系列步骤中的一部分。
| 到 | 请参阅 |
| 转到下一步 | 为 ShapeLabel 控件添加事件 |
| 从头开始 | 创建 ActiveX 控件 |