用外接程序操作 IDE

扩展性对象模型中的几个对象允许操作和扩展 Visual Basic IDE。该主题里的代码举了几个例子。

命令栏集合和命令栏对象

通过它们可以操作命令栏,命令栏是工具栏和菜单栏的组合。几乎可以对 CommandBar 对象做任何事,包括创建新的对象、删除已有的对象和改变它们的尺寸、位置和图标。

这是一个如何操作命令行的示例:

Dim mcbMenuCommandBar As Office.CommandBarControl

'确定标准的工具栏是可见的。
gVBInstance.CommandBars("Standard").Visible = True
'当作按钮添加到标准工具栏中。
'在工具箱的右边添加该按钮。
Set mcbMenuCommandBar = _
gVBInstance.CommandBars("Standard").Controls.Add _
(1, , , gVBInstance.CommandBars("Standard") _
.Controls.Count)
'设置按钮的标题。
mcbMenuCommandBar.Caption = "My Test"
'把图标复制到剪贴板上。
Clipboard.SetData LoadPicture("c:\windows\circles.bmp")
'把图标粘贴在按钮上。
mcbMenuCommandBar.PasteFace

'处理 CommandBarEvents 对象。
Set Me.MenuHandler = _
gVBInstance.Events.CommandBarEvents _
(mcbMenucommandBar)

详细信息   关于使用命令条的附加信息,请参阅第四章“创建激活外接程序的工具栏按钮”。

Windows 集合和 Window 对象

该集合和该对象允许创建和删除窗口,移动在 IDE 中打开的窗口,和改变它的尺寸。所有的窗口都包含在 Windows 集合中。这意味着这些窗口不曾真正被关闭,只是通过 Visible 属性改变了它们的可视性。

注意,虽能使用 Window 对象来操作窗口框架本身,但不能用它来操作窗口所包含的对象(例如控件)。若要操作窗口包含的对象,必须引用适当的对象。

随后的代码片断演示如何引用 Window 对象和 Windows 集合:

'触发窗口的可视性。假设列表中的窗口顺序和集合中的窗口顺序相匹配。
'一个更好的方法是根据 caption  type 来查询窗口。
Private Sub cmdToggle_Click()
   Dim w As Window
   Dim sw As String

   sw = Combo1.Text
   If sw <> "" Then
      If sw = "MainWindow" Then
         Set w = vbi.MainWindow
      Else
         Set w = vbi.Windows(Combo1.ListIndex)
      End If
      w.Visible = Not w.Visible
      RefreshWindows
   End If
End Sub

LinkedWindows 集合

该集合包含了给定 LinkedWindowFrame 中的所有窗格。“链接的窗口”定义成两个或更多窗口,这些窗口连接在单一的联合窗口中,被称之为“LinkedWindowFrame”的框架所包围。LinkedWindowFrame 中的每一个子窗口被称为“窗格”。LinkedWindowFrame 存在于所有能链接或连接在一起的窗口四周,(除了代码窗口、设计器窗口、对象浏览器窗口以及搜索和替换窗口外)。

如果从 LinkedWindowFrame 中删除了所有的区,该 LinkedWindowFrame 也被删除。(唯一的例外是主窗口)

只有类型为 LinkedWindowFrame 的窗口有 ContainedWindows 集合。对于其它窗口类型,该集合是 Nothing

下面的代码片断演示了如何引用 LinkedWindows 集合:

'如果窗口被链接或连接,则解除链接或连接。
Private Sub cmdUnlinkWindow_Click()
   Dim w As Window
   Dim sw As String

   sw = Combo1.Text
   If sw = "" Then Exit Sub
   If sw = "MainWindow" Then
      Set w = vbi.Windows.MainWindow
   Else
      Set w = vbi.Windows(Combo1.ListIndex)
   End If
   If Not w.LinkedWindowFrame Is Nothing Then
      w.LinkedWindowFrame.LinkedWindows.Remove w
   End If
   RefreshWindows
End Sub

Code Pane 对象

这是一个显示对象代码的对象提供的窗口。不能创建或破坏 IDE 中的 CodePane 对象,但可以操纵它们的高度、宽度和位置。也可以插入或删除代码行(使用 InsertLines 和 DeleteLine 方法),选择某些行并使其突出显示或不突出显示。可以使用 GetSelectedText 方法把选好的代码复制到 Windows 的剪贴板上。

虽然 CodePane 对象允许可视地检查或选择存在的代码,但是不允许更改它。为此,必须使用 CodeModule 对象,如本章“用外接程序操作代码”部分所描述的那样。

下面的代码片断演示了如何引用 CodePane 集合:

'用滚动条滚动代码窗格。
Private Sub sclCodePane_Change()
   Dim p As VBProject
   Dim c As VBComponent
   Dim cp As CodePane
   Dim sc As String
   Dim sp As String

   sp = cmbProj.Text
   sc = cmbComp.Text
   If sp <> "" And sc <> "" Then
      Set c = _
         vbi.VBProjects.Item(sp). _
         VBComponents.Item(sc)
      Set cp = c.CodeModule.CodePane
      cp.TopLine = sclCodePane.Value + 1
   End If
End Sub