尽管菜单和工具栏按钮看上去不太一样,但是对于 Visual Basic 而言,实质上它们是相同类型的对象。在内部,Visual Basic 将菜单、菜单命令、工具栏以及工具栏按钮都看作命令条。
命令条将菜单及工具栏的概念统一成为一个一般性的、可视的、可编程的对象。作为命令条,菜单包含了具有图标和标题的菜单命令,并且在保持大家熟悉的菜单格式的同时还表现出类似于按钮的特性。有些工具栏按钮与组合框控件类似,带有下拉箭头。某些类型的命令条对象可以包括其它的命令条对象。
关于命令条对象模型的讨论超出了本书的范围,这里只讲述一些基本知识,以帮助您把外接程序放到需要它的地方。
总共有三种类型的命令条:
弹出式 | 弹出式的命令条相当于菜单条的一个菜单项。 |
组合框 | 组合框命令条类似于组合框控件。它包括一个工具栏和紧接着工具栏的一个下拉箭头(类似于“添加工程”工具栏按钮)。单击该按钮,将显示出更多的带图标的菜单命令。 |
按钮 | 按钮命令条相当于标准的工具栏按钮,即带有图标的按钮。 |
命令条的概念仅仅对于程序员才是真正重要的,因为与 Visual Basic 前期的版本相比,界面操作上基本是类似的。但是编程方式却有了很大的区别。在“引用”对话框中选择“Microsoft Office 8.0 Object library”复选框,就可以通过“对象浏览器”访问并浏览各种命令条对象了。
因为菜单和工具栏属于相同的对象库,它们都将通过 CommandBarControl 对象被引用。例如,要在代码中声明基本对象以便使用它,可以输入:
Dim mcbMenuCommandBar As Office.CommandBarControl
开发环境中的每一个工具栏、菜单或上下文菜单都是命令条。如果将它们看作容纳其它命令条的容器,将会有助于对命令条的理解。因此一个菜单条命令条可以包括几个菜单项,每个菜单项本身也是一个命令条,而且它又可以包括若干个菜单命令,每条命令依然是一个命令条。
利用这种模式可以很容易地在开发环境中放置外接程序。如果希望在某个地方显示外接程序,只需使用命令条即可。在引用命令条的时候需要按照从上往下、从左往右的顺序。在下面的例子中,将新的外接程序显示为“工具”菜单中的一条命令。具体做法如下所示:
Set mcbMenuCommandBar = _
VBInst.CommandBars(1).Controls(8).CommandBar. _
Controls.Add(1, , , 3)
以上代码在从顶端数的第三条菜单命令之前安装了一个弹出式命令条。代码中有些什么呢?
CommandBars(1)
。(注意,因为 Item 是CommandBars 集合的默认属性,所以这段代码等同于 CommandBars.Item(1)
。)对命令条的第一次引用是工具栏本身。第一个工具栏又总是菜单条,因此当我们提到 CommandBars(1)
的时候也就是指菜单命令条。Controls(8)
。它指的是该命令条从左边数的第八个控件,即“工具”菜单。CommandBar.Controls
。这时开始对“工具”命令条产生影响。Add(1, , , 3)
。利用 Add 方法把一个新的命令条(这里是菜单命令)添加到“工具”菜单中。在“对象浏览器”中查看 CommandBarControls 对象即可得到关于 Add 方法的参数的信息。然而要注意的是,菜单或工具栏中的命令条控件可能被用户移动到任何地方去,这就意味着不能指望它们一直保持固定不变的数值位置。另外,如果要支持 Visual Basic 的本地化版本,也不能指望命令条控件的标题是固定不变的。
但有一种方法总能获得特定的菜单项,而不必考虑其位置。菜单项的 CommandBar 对象名称是不会被本地化的;这样在最高级的 CommandBars 集合中总是可以指定该名称来引用菜单项。例如,为了得到表示外接程序菜单的命令条的引用对象,可以利用下述语句:
Set cmdBar = VBInst.CommandBars("Add-Ins")
无论菜单项的位置在哪里,无论标题的名称是什么,该语句都会起作用。获得特定菜单项的 CommandBar 对象之后,可以利用其控件集合为菜单添加一项。