扩展性对象模型中的几个对象允许操作和扩展 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)
详细信息 关于使用命令条的附加信息,请参阅第四章“创建激活外接程序的工具栏按钮”。
该集合和该对象允许创建和删除窗口,移动在 IDE 中打开的窗口,和改变它的尺寸。所有的窗口都包含在 Windows 集合中。这意味着这些窗口不曾真正被关闭,只是通过 Visible 属性改变了它们的可视性。
注意,虽能使用 Window 对象来操作窗口框架本身,但不能用它来操作窗口所包含的对象(例如控件)。若要操作窗口包含的对象,必须引用适当的对象。
随后的代码片断演示如何引用 Window 对象和 Windows 集合:
'触发窗口的可视性。假设列表中的窗口顺序和集合中的窗口顺序相匹配。'一个更好的方法是根据caption和type来查询窗口。Private Sub cmdToggle_Click()Dim w As WindowDim sw As Stringsw = Combo1.TextIf sw <> "" ThenIf sw = "MainWindow" ThenSet w = vbi.MainWindowElseSet w = vbi.Windows(Combo1.ListIndex)End Ifw.Visible = Not w.VisibleRefreshWindowsEnd IfEnd Sub
该集合包含了给定 LinkedWindowFrame 中的所有窗格。“链接的窗口”定义成两个或更多窗口,这些窗口连接在单一的联合窗口中,被称之为“LinkedWindowFrame”的框架所包围。LinkedWindowFrame 中的每一个子窗口被称为“窗格”。LinkedWindowFrame 存在于所有能链接或连接在一起的窗口四周,(除了代码窗口、设计器窗口、对象浏览器窗口以及搜索和替换窗口外)。
如果从 LinkedWindowFrame 中删除了所有的区,该 LinkedWindowFrame 也被删除。(唯一的例外是主窗口)
只有类型为 LinkedWindowFrame 的窗口有 ContainedWindows 集合。对于其它窗口类型,该集合是 Nothing。
下面的代码片断演示了如何引用 LinkedWindows 集合:
'如果窗口被链接或连接,则解除链接或连接。Private Sub cmdUnlinkWindow_Click()Dim w As WindowDim sw As Stringsw = Combo1.TextIf sw = "" Then Exit SubIf sw = "MainWindow" ThenSet w = vbi.Windows.MainWindowElseSet w = vbi.Windows(Combo1.ListIndex)End IfIf Not w.LinkedWindowFrame Is Nothing Thenw.LinkedWindowFrame.LinkedWindows.Remove wEnd IfRefreshWindowsEnd Sub
这是一个显示对象代码的对象提供的窗口。不能创建或破坏 IDE 中的 CodePane 对象,但可以操纵它们的高度、宽度和位置。也可以插入或删除代码行(使用 InsertLines 和 DeleteLine 方法),选择某些行并使其突出显示或不突出显示。可以使用 GetSelectedText 方法把选好的代码复制到 Windows 的剪贴板上。
虽然 CodePane 对象允许可视地检查或选择存在的代码,但是不允许更改它。为此,必须使用 CodeModule 对象,如本章“用外接程序操作代码”部分所描述的那样。
下面的代码片断演示了如何引用 CodePane 集合:
'用滚动条滚动代码窗格。Private Sub sclCodePane_Change()Dim p As VBProjectDim c As VBComponentDim cp As CodePaneDim sc As StringDim sp As Stringsp = cmbProj.Textsc = cmbComp.TextIf sp <> "" And sc <> "" ThenSet c = _vbi.VBProjects.Item(sp). _VBComponents.Item(sc)Set cp = c.CodeModule.CodePanecp.TopLine = sclCodePane.Value + 1End IfEnd Sub