可以用工具栏进一步增强应用程序的菜单界面。工具栏含有工具栏按钮,它提供了对于应用程序中最常用的命令的快速访问。例如:Visual Basic的工具栏含有执行常用命令的ToolBarButton,如“打开”(打开已存在的工程)、“保存”(存储当前的工程),等等。
创建工具栏
工具栏(也称为发条或者控制栏)已经成为许多基于Windows的应用程序的标准功能。工具栏提供了对于应用程序中最常用的菜单命令的快速访问。使用ToolBar控件来创建工具栏非常容易且很方便,它在Visual Basic的专业版与企业版中是可用的。如果使用的是Visual Basic学习版,则可以像本章后面的“协调菜单与工具栏的外观”所描述的那样用手工来创建工具栏。
下列示例演示为MDI应用程序创建工具栏的过程;在标准窗体上创建一个工具栏的过程基本上一样。
要手工创建工具栏,请按照以下步骤执行:
1. 在MDI窗体上放置一个图片框。图片框的宽度会自动伸展,直到填满MDI窗体工作空间。工作空间就是窗体边框以内的区 域,不包括标题条、菜单栏或所有的工具栏、状态栏或者可能在窗体上的滚动条。
注意 只能把那些直接支持Align属性的控件放置在MDI窗体上(图片框是支持这一属性的唯一的标准控件)。
2. 在图片框中,可以放置任何想在工具栏上显示的控件。典型地,用CommandButton或Image控件来创建工具栏按钮。图 6.16表示出了一个含有Image控件的工具栏。
要在图片框中添加控件,单击工具栏中的控件按钮,然后在图片框中画出它。
注意 当MDI窗体中包含了图片框时,该 MDI 窗体的内部区域不包括图片框在内。例如:MDI窗体的ScaleHeigh属性返回MDI窗体的内部高度,这个高度已不包括图片框的高度。

3. 设置设计时属性。
使用工具栏的一个好处是可以显示一个形象的命令图示。Image控件是作为工具栏按钮的一个很好的选择,因为可以用它来显示一个位图。在设计时设置其Picture属性来显示一个位图;这样,当该按钮被单击时,即能提供一个命令执行的可见信息。也可以通过设置按钮的ToolTipText属性来使用工具提示,这样,当用户把鼠标指针保持在一个按钮上时,就可以显示出该工具栏按钮的名称。
4. 编写代码
因为工具栏频繁地用于提供对其它命令的快捷访问,因而在大部分时间内都是从每一个按钮的Click事件中调用其它过程,比如对应的菜单命令。
提示 可用一个不显示工具栏的MDI窗体来使用在运行时不可见的控件(比如Timer控件)。为了做到这一点,在MDI窗体上放置一个图片框,把控件放到图片框中,然后把图片框的Visible属性设置为False。
编写工具栏的代码
工具栏用于提供访问某些应用程序命令的快捷方法。例如:图 6.16 中工具栏上的第一个按钮就是“新建文件”命令的快捷键。现在,可以在MDINotePad示例应用程序中三个地方请求创建新文件。
1.在MDI窗体上(MDI窗体上“文件”菜单中的“新建”命令)。
2.在子窗体上(在子窗体“文件”菜单上的“新建”命令)。
3.在工具栏上(“新建文件”按钮)。
与其把这个代码重复三次,还不如从子窗体的mnuFileNew_Click事件取出原代码,然后把它放入子窗体的一个公用过程中。可以从上面任何一个事件过程调用这个过程。以下是一个示例:
'这个例程在公共过程中。
Public Sub FileNew ()
Dim frmNewPad As New frmNotePad
frmNewPad.Show
End Sub
'在子窗体的“文件”菜单上选取“新建”。
Private Sub mnuchildFileNew_Click ()
FileNew
End Sub
'在 MDI 窗体的“文件”菜单上选取“新建”。
Private Sub mnumdiFileNew_Click ()
frmNotePad.FileNew
End Sub
'在工具栏上单击“新建文件”按钮。
Private Sub btnFileNew_Click ()
frmNotePad.FileNew
End Sub
协调菜单与工具栏的外观
当由其它应用程序提供的对象在窗体中被激活时,有许多方法让对象的菜单与工具栏出现在容器窗体内;然而,需要规定它们将如何显示。这一过程叫做用户界面协调,因为Visual Basic与已经链接或嵌入的对象必须协调容器窗体中的空间。
控制菜单的外观
通过设置窗体的NegotiateMenus属性可以决定一个链接或嵌入的对象的菜单是否出现在容器窗体中。如果子窗体的NegotiateMenus属性置为True(缺省),而且容器有一个定义的菜单栏,那么,当这个对象被激活时,它的菜单就放置在容器的菜单栏中。如果容器没有菜单栏,或者NegotiateMenus 属性被设置为False,那么,当这个对象激活时对象的菜单将不出现。
注意 NegotiateMenus属性不适用于MDI窗体。
控制工具栏的外观
MDI窗体的NegotiateToolbars属性决定了链接或嵌入对象的工具栏是不固定的调色板还是被放置在父窗体上。这种性能不要求工具栏出现在MDI父窗体上。如果MDI窗体的NegotiateToolbars属性设为True,则对象的工具栏出现在MDI父窗体上。如果NegotiateToolbars设为False,则对象的工具栏就为不固定的调色板。
注意 NegotiateToolbars属性只用于MDI窗体。
如果MDI窗体包含工具栏,它通常被包含在父窗体的PictureBox控件中。图片框的Negotiate属性决定了被激活时容器的工具栏是继续显示还是被对象的工具栏所代替。如果Negotiate设置为True,则除了容器的工具栏外还显示对象的工具栏。如果Negotiate设置为False,则对象的工具栏代替容器的工具栏。
注意 菜单与工具栏的协调只发生在支持现场激活的可插入对象之上。有关现场激活的详细信息,请参阅第十章“用部件编程”。用以下过程可以看到这三个属性如何交互作用。
要执行菜单与工具栏的协调,请按照以下步骤执行:
1. 在MDI窗体中添加工具栏。这在本章前面的“创建工具栏”中描述过。
2. 在子窗体上放置一个可插入的对象。
3. 设置NegotiateM
vb的工具栏、对话框