普通的 Visual Basic 窗体存活期由一些关键事件所标记,比如 Initialize、Load、QueryUnload 和 Unload 等。为了创建行为符合标准的应用程序,知道这些事件在窗体存活期中何时引发是十分重要的。
这对控件也同样适用。UserControl 存活期中的关键事件是 Initialize,InitProperties,ReadProperties,WriteProperties 和 Terminate。下面将探讨这些事件。
注意 本主题是演示创建示例性 ActiveX 控件一系列步骤中的一部分。它是从创建 ActiveX 控件主题开始,可在相关信息中选择该主题。
要观察 ShapeLabel 的关键事件,请按照以下步骤执行:
Private Sub UserControl_Initialize()
Debug.Print "Initialize"
End Sub
Private Sub UserControl_InitProperties()
Debug.Print "InitProperties"
End Sub
Private Sub UserControl_ReadProperties(PropBag As _
PropertyBag)
Debug.Print "ReadProperties"
End Sub
Private Sub UserControl_WriteProperties(PropBag _
As PropertyBag)
Debug.Print "WriteProperties"
End Sub
Private Sub UserControl_Terminate()
Debug.Print "Terminate"
End Sub
注意 对于 UserControl 对象而言,Load 和 Unload 事件被ReadProperties 和 WriteProperties 事件所代替。“建立 ActiveX 控件”中的“理解控件的存活期和关键事件”部分将更加详细地讨论这些内容。
这里发生了什么事情呢?ShapeLabel 控件的另一个实例尚未被放入Form1。所有这些事件来自何处?
这说明了有关控件的一个重要问题。 把控件放入窗体后,它就被视为这个窗体的永久设施了。以控件作者的眼光来看,控件总是在被撤消和重建。
通过关闭 ShapeLabel 的设计器而将 ShapeLabel 置于运行模式时,Form1 上的 ShapeLabel 实例被撤消并重建,这时它接收一个 Initialize 事件。为什么首先看不见 Terminate 事件?这是因为置在 Form1 上的原始ShapeLabel 实例是添加 UserControl_Terminate 事件过程代码之前创建的!欢迎来到充满活力的创建控件的拓荒之地。
注意 单击窗体上下文菜单上的“更新用户控件”时,控件各个实例也都将被撤消和重建。
控件实例创建之后,可以通过 ReadProperties 事件,从包含此控件实例的窗体所属的 .frm 文件获取该控件所保存的属性值。
当设计时的控件实例被撤消时,WriteProperties 事件提供机会以保存在设计时设置的属性值。属性值保存于控件所属窗体的 .frm 文件中,正如在本章后面“保存 ShapeLabel 控件的属性值”中所见到的一样。
控件撤消时引发 Terminate 事件。
注意 根据缺省,在(从“工具”菜单进行访问)“选项”对话框的“通用”选项卡上选中“请求时编译”选项。用 CTRL+F5 (或“运行”菜单上的“启动全编译”)覆盖“请求时编译”,并在进入运行模式之前编译组中全部工程。这是很有用的,因为编译错误通常要求重新设置工程,这意味着要返回设计模式。在调试控件时,可能宁可关闭“请求时编译”,也不愿意使用 CTRL+F5。
运行时期的控件实例永远不会获得 WriteProperties 事件,因为它并不需要保存其属性值。这主要是出于 ShapeLabel 的未来的考虑。当它被编译成 .ocx 文件时,它会被添加到另一个工程,把一个实例放入窗体,将此工程编译成一个 .exe 文件并使其运行。 关闭该 .exe 文件时,ShapeLabel 实例能够保存其属性值的唯一地方就是该 .exe 文件。 而正常运作的操作系统不能容许这类行为。
把控件的新实例放入容器时,它获得一个 InitProperties 事件。 可把代码放入 UserControl_InitProperties 事件过程以便:
详细信息 关于控件存活期和其间的关键事件的细节在第九章“建立 ActiveX 控件”中的“理解控件的存活期和关键事件”部分讨论。同一章的“显露子控件属性”部分解释了 ActiveX 控件界面向导如何简化创建用来存取属性值的代码。关于控件存活期和其间的关键事件的细节在“建立 ActiveX 控件”中的“理解控件的存活期和关键事件”部分讨论。同一章的“显露子控件属性”部分解释了 ActiveX 控件界面向导如何简化创建用来存取属性值的代码。
本主题是演示创建示例性 ActiveX 控件一系列步骤中的一部分。
到 | 请参阅 |
转到下一步 | ShapeLabel 控件的画出 |
从头开始 | 创建 ActiveX 控件 |