ActiveX 文档生命期内的关键事件

ActiveX 文档的设计非常依赖于当前作为目标的应用程序。所有容器的创建不是相等的,在考虑事件时尤其明显。但是,在测试事件前,请先阅读下面的两点注意,它们将影响键事件的可用性和行为。

关于定位的一点注意

就象 ActiveX 控件一样,ActiveX 文档不能独立存在。它必须放置在容器中。把 ActiveX 文档挂接到其容器的过程称为定位─ 也就是说,在容器中为 ActiveX 文档分配一个位置

只有在 ActiveX 文档已经被定位之后,容器的属性对该文档才是可用的。例如,在 ActiveX 文档被定位前,UserDocument 对象的 Parent 属性(它返回对容器的引用)是不可用的。Hyperlink 对象在文档被定位前也是不可用的。

详细信息 创建 ActiveX 文档与创建 ActiveX 控件相似,请精读“建立 ActiveX 控件”的“创建控件的术语”。

关于保存属性的一点注意

如果容器应用程序支持 PropertyBag,那么保存文件和在文件检索数据都很容易─ 无论是否要保存到 .vbd 文件都不依靠该应用程序。例如,Internet Explorer 把数据保存到 .vbd 文件,但 Office Binder 却把所有数据保存到 .obd (Office Binder Data)文件。但是,一旦数据已经保存好,InitProperties 就不会发生;ReadProperties 事件将取代它。同样,在用户保存一个属性之前,WriteProperties 事件也不会发生。

详细信息 要用 PropertyBag 来保存属性,请参阅本章的“保持 ActiveX 文档数据”。

主要 UserDocument 事件

在 UserDocument 对象的生命期内的主要事件的含义如下:

在保存属性前打开 ActiveX 文档

当用户打开一个 ActiveX 文档时,该文档上没有属性被存储,则下列事件将发生。

事件 事件完成的任务
Initialize 创建文档,但未在容器中定位。
InitProperties 设置属性的缺省值。
Show 在容器中显示文档。在容器中已经定位了文档,因而容器属性变得可用。
EnterFocus 文档获得焦点。

在保存属性后打开 ActiveX 文档

如果用户已经保存了任一属性,则发生 ReadProperties 事件,而不是 InitProperties 事件。

事件 事件完成的任务
Initialize 创建文档,但未在容器中定位。
ReadProperties 通过 PropertyBag 对象的 ReadProperties 方法读取属性。
Show 在容器中显示文档。
EnterFocus 文档获得焦点。

Show 和 Hide 事件

也许,Show 和 Hide 事件是 ActiveX 文档的两个最重要的事件。

这些事件由于以下原因而格外重要:

注意 在Internet Explorer 3.0中,ActiveX 文档储存于四个文档的高速缓存中。当用户加载或漫游到第五个文档时,ActiveX 文档将被中止。当用户离开 ActiveX 文档漫游到另一个文档,或当文档正被浏览或仍在当前文档的高速缓存中时,而Internet Explorer 3.0被终止时,发生Hide 事件。

详细信息 “创建 ActiveX 文档”中的一个循序渐进过程“UserDocument 的生命周期”主题,用示例说明了 ActiveX 文档生命期中的主要事件。