普通的 Visual Basic 窗体的存活期中有一些明显的关键事件,例如 Initialize、Load、QueryUnload 及 Unload。为了创建一个优良的应用程序,必须知道在窗体的生命周期中何时发生这些事件。
尽管 ActiveX 文档看起来与窗体十分类似,但它们有着不同的行为方式,这主要是因为 ActiveX 文档必须被其它的应用程序所包容。在编制 ActiveX 文档时,必须清醒地认识到 ActiveX 文档是“短命的”。当容器程序为 Web 浏览器(例如 Internet Explorer)时尤其如此。
UserDocument 对象生命周期中的关键事件包括:Initialize、InitProperties、Show、Hide 和 Terminate。下面将展示这些事件。
注意 本主题是创建示例 ActiveX 文档的步骤之一。如果要从头开始学习有关的内容,选择“创建 ActiveX 文档”主题。
要查看 FirstDoc UserDocument 对象的关键事件
Private Sub UserDocument_Initialize()
Debug.Print "Initialize"
End Sub
Private Sub UserDocument_InitProperties()
Debug.Print "InitProperties"
End Sub
Private Sub UserDocument_Show()
Static intCount As Integer
intCount = intCount + 1
Debug.Print "Show " & intCount
End Sub
Private Sub UserDocument_Hide()
Static intCount As Integer
intCount = intCount + 1
Debug.Print "Hide " & intCount
End Sub
Private Sub UserDocument_Terminate()
Debug.Print "Terminate"
End Sub
注意 可以看到在 Show 的后面紧跟了一个 1,这表示 ActiveX 文档被 Internet Explorer 显示了一次。只要对该 ActiveX 文档的引用保留在 Internet Explorer 的高速缓存中,那么每当从另外的 URL 中定位至该文档,数字将加一。
Initialize 与 InitProperties 事件有一些相似的地方,但必须注意到它们之间存在的区别。简单地说,当 ActiveX 文档被加载时,总会触发 Initialize 事件,但是 InitProperties 事件仅在每次保存文档时被触发一次。在 Initialize 事件发生时,将触发 ReadProperties 和 WriteProperties 事件。请看下面的例子:
必须注意上述的区别,这关系到应该把代码放到什么地方。毫无疑问,如果希望在启动文档时总是执行某个过程,那么把它放到 Initialize 事件中。如果希望仅在第一次浏览 ActiveX 文档时才执行某一段程序,那么把它放到 InitProperties 事件中。
但是,必须注意到在使用 Initialize 事件时的限制条件。简单地说,在 Initialize 事件中不能获得有关容器的信息(例如 Parent 属性)的过程。解决的办法是使用 Show 事件,该事件发生在 ActiveX 文档在容器中定位之后。