用外接程序操作代码

Visual Basic 扩展模型提供通过 CodeModule 对象在 Visual Basic 工程中查看和操作代码的能力。利用 CodeModule 对象,可以通过编程在工程中添加或者删除代码、在代码中进行搜索或者修改。可以浏览代码,确定总共有多少行,或者查看某个特定过程的开始行和结束行等等。也可以添加、删除或者替换代码行。

重点   应该了解 CodeModule 对象和 CodePane 对象的区别。CodePane 对象只允许查看代码而不能修改代码。CodeModule 对象允许修改代码但是不能查看。这两个对象一起工作时既可查看又可修改代码。

Members 对象允许查看并且修改给定的模块中的过程的代码和属性。每个过程属性的变化取决于所查看的模块和过程的类型。为了了解过程的属性,请在 Tools 菜单中选择“过程属性”项。

设计者本身并不是对象。它实际上是创建可视界面的基础。可以把扩展模型中视为空的插槽,在它上面可插入几个不同的设计者。例如,如果正在使用 Visual Basic 窗体,则不论创建或是编辑窗体,都可使用 Visual Basic 窗体设计者。在创建或者编辑 UserDocument 时,可用 UserDocument 设计者。当创建或者编辑 UserControl 时,可用 UserControl 设计者。尽管从编程角度来讲设计者各不相同,但是对于用户来说,也可能看不到它们之间的区别。

下面的代码段阐述了如何引用 CodeModule 对象:

'清除代码模块中的所有文本。
Private Sub cmdClearText_Click()
   Dim p As VBProject
   Dim c As VBComponent
   Dim sc As String
   Dim sp As String
   
   Screen.MousePointer = vbHourglass
   sp = cmbProj.Text
   sc = cmbComp.Text
   If sp <> "" And sc <> "" Then
      Set c = _
         vbi.VBProjects.Item(sp).VBComponents.Item(sc)
      c.CodeModule.DeleteLines 1, _
         c.CodeModule.CountOfLines
      SynchCodePaneScroll
   End If
   Screen.MousePointer = vbDefault
End Sub

'在代码模块中插入文本。
Private Sub cmdInsertText_Click()
   Dim p As VBProject
   Dim c As VBComponent
   Dim sc As String
   Dim sp As String
   
   Screen.MousePointer = vbHourglass
   sp = cmbProj.Text
   sc = cmbComp.Text
   If sp <> "" And sc <> "" And txtDisplay.Text _
      <> "" Then
      Set c = _
         vbi.VBProjects.Item(sp).VBComponents.Item(sc)
      c.CodeModule.AddFromString txtDisplay.Text
      SynchCodePaneScroll
   End If
   Screen.MousePointer = vbDefault
End Sub

'将滚动条控件的位置与当前 CodePane 的位置保持同步。
Private Sub SynchCodePaneScroll()
   vbi.VBProjects.Item(sp).VBComponents.Item(sc)
   Dim cp As CodePane
      Set cp = GetCodePane
      sclCodePane.Max = cp.CodeModule.CountOfLines
      sclCodePane.Value = cp.TopLine - 1
End Sub