为 UserDocument 文档添加属性

与 UserControl 对象类似,可以为 UserDocument 对象创建公有属性。在创建公有属性时,需要公开该属性,使其它的应用程序能够设置或得到它的属性值。在 ActXDoc 工程中,将创建一个属性,它能够被其它 ActiveX 文档或窗体访问。在这里,还将向工程中添加一个代码模块,用来包含一个全局模块。

注意 本主题是创建示例 ActiveX 文档的步骤之一。如果要从头开始学习有关的内容,选择“创建 ActiveX 文档”主题。

要为 FirstDoc 添加一个属性

  1. 首先在工程中添加一个代码模块。在“工程”菜单中,单击“添加模块”打开对话框“添加模块”。然后双击“模块”图标,往 ActXDoc 工程中加入一个新的代码模块。

  2. 在“属性”窗口中双击“名称”,把该模块的名字改为 mGlobal。

  3. 在“工程资源管理器”窗口中双击“模块”图标,在“声明”部分中写入下面的代码:
    'FirstDoc 的对象变量
    Public gFirstDoc As FirstDoc 
    

    这个全局对象将包含一个对象引用,用来链接 FirstDoc 和 SecndDoc ActiveX 文档。

  4. 在“工程资源管理器”窗口中,双击“FirstDoc”图标。

  5. 在“工具箱”中双击“文本框”图标,在 FirstDoc 中加入一个新的 TextBox 控件。按照下表设置它的属性值:
    Text1 属性名称 属性值
    Name txtFirstDoc
    Text (nothing)

  6. 如下图所示,把该 TextBox 控件放在 UserDocument 中的第一个 TextBox 的下方:

  7. 双击 FirstDoc 的设计器,打开它的“代码”窗口。

  8. 在“工具”菜单中,单击“添加过程”。

  9. 在对话框“添加过程”中,往“名称”文本框中输入“strDocProp”;单击“属性”选项创建一个公有属性;然后单击“确定”。

  10. Visual Basic 将为该模块的 Property Get 和 Property Let 过程中自动添加代码。但是,请按照下面代码进行修改:
    Public Property Get strDocProp() As String
    '注意:在上一行中,将返回值的类型属性
    ' "As Variant" 改为
    'As String”。
    strDocProp = txtFirstDoc.Text
    End Property
    
    Public Property Let strDocProp(ByVal _
    NewStrDocProp As String)
    '注意:在上一行中,
    '将参数类型从 Variant 类型改为 String 类型。
    txtFirstDoc.Text = NewStrDocProp
    End Property
    

    上面的代码将 strDocProp 公开为 FirstDoc ActiveX 文档的公有属性。换言之,它将字符串的显示与存储的任务委托给 TextBox 控件的 Text 属性。既然该属性是一个公有属性,就可以把它的值传递给 SecndDoc 对象。这只需修改“到下一个”按钮的代码即可。

  11. 在“代码”窗口中,修改“cmdGoNext”按钮的 Click 事件的代码。在其中加上一条 Set 语句,设置全局对象 gFirstDoc。将该对象变量设置为 Me,于是创建了一个对 FirstDoc ActiveX 文档的引用。然后,可以使用该引用访问文档的公有属性和方法。
    Private Sub cmdGoNext_Click()
    '注意:下面提供的路径不一定对应于
    '文件 SecndDoc.vbd 在机器上的实际路径
    Set gFirstDoc = Me ' <-- 加入这一行。
    
    HyperLink.NavigateTo _
    App.Path & "\SecndDoc.vbd" 
    End Sub
    
  12. 在“工程资源管理器”窗口中,双击 SecndDoc 图标,使该文档的设计器出现在桌面的最前面。

  13. 双击 SecndDoc 的设计器,打开它的“代码”窗口。然后在该 UserDocument 对象的 Show 事件中加入下列代码。
    Private Sub UserDocument_Show()
    If Not gFirstDoc Is Nothing Then
    lblCaption.Caption = gFirstDoc.strDocProp
    Set gFirstDoc = Nothing
    End If 
    End Sub
    

    在第 11 步的代码中,我们把全局对象变量设置为 FirstDoc 文档。第 13 步的代码测试该全局变量是否被设置为一个对象。如果已设置,那么可以使用 ActiveX 文档的公有属性,标签的标题将被设置为 FirstDoc 文档的 strDocProp 属性值。在设置 Caption 属性之后,全局变量被破坏(设置为 Nothing)。

    注意 使用全局变量保存对 FirstDoc UserDocument 的引用是非常糟糕的做法;“建立 ActiveX 文档”对此进行了解释。

  14. 在“文件”菜单中,单击“保存工程”,将该代码模块保存为 mGlobal.bas。

运行工程

  1. 按 F5 键运行工程。

  2. 在Internet Explorer 的“地址”文本框中输入文件 FirstDoc.vbd 的路径。

  3. 在新的 TextBox 控件中输入一些文字,例如“HTML 不再令人望而生畏!”。

  4. 单击“Go Next”,TextBox 控件中的文字将显示在 SecndDoc 文档的标签上。

循序渐进

本主题为示例 ActiveX 文档创建过程中的步骤之一。

请参阅
到下一步 “将属性保存到 PropertyBag 中”
从头开始 “创建 ActiveX 文档”