使用 Toolbar 控件

Toolbar 控件包含用来创建工具栏的 Button 对象的集合。工具栏可与应用程序相关联。

一般情况下,工具栏中的按钮与应用菜单中的菜单项相对应,可以用它们来访问应用程序最常用的功能和命令。Toolbar 控件也可以包含其它控件,例如 ComboBox 控件或 TextBox 控件。

要创建工具栏,必须先将 Button 对象加入 Buttons 集合,每个 Button 对象可以拥有可选的文本,或者(并且)拥有相关联的 ImageList 控件提供的图象。可以用 Caption 属性为每个 Button 对象设置文本,用 Image 属性设置图象。在设计时,可通过“Toolbar 属性页”对话框加入 Button 对象。在运行时,可以用 Add 和 Remove 方法将按钮加入 Buttons 集合或从中删除。

要在设计时添加其它控件,只需在工具栏上绘制所需要的控件拖入工具栏即可。另外,还可以创建 Placeholder 样式的 Button 对象,并在 Resize 事件中将需要的控件盖在该按钮上。

在运行时,双击工具栏将弹出“自定义工具栏”对话框,以便用户隐藏、显示或重新排列工具栏的按钮。可以设置 AllowCustomize 属性来选用或禁用该对话框。还可以用 Customize 方法弹出“自定义工具栏”对话框。如果需要保存或恢复工具栏的状态,或允许最终用户这样做,可使用 SaveToolbar 和 RestoreToolbar 方法。

可能的用途

Buttons 集合

Toolbar 控件由 Buttons 集合中的一个或多个 Button 对象构成。在设计时和运行时均可创建 Button 对象。每个按钮可有图象、标题、工具提示,并且可以同时具有上述三种特性,如下所示:

每个按钮对象还有 Style 属性(在下面讨论),该属性决定了按钮的行为。

将 ImageList 控件与 Toolbar 控件相关联

工具栏通常用图标代表应用程序的功能。例如,软盘的图标一般被理解为“保存文件”功能。要使工具栏能够显示这样的图象,必须首先将 ImageList 控件与 Toolbar 控件相关联。这项工作在设计时和运行时均可完成。

在设计时将 ImageList 控件和 Toolbar 控件相关联

  1. 在 ImageList 控件中装入用于 Toolbar 的图象。

  2. 用鼠标右键单击 Toolbar 控件,并单击“属性”打开“属性页”对话框。

  3. 在“通用”选项卡中,单击“图象列表”框,选择需要的 ImageList 控件。

在运行时将 ImageList 控件与 Toolbar 控件相关联,只需将 ImageList 属性设置为 ImageList 控件的名称,如下面的示例所示:

Private Sub Form_Load()
   'Toolbar 控件名为“tlbTools”,
   'ImageList 控件名为“imlTools”。
   tlbTools.ImageList = imlTools
End Sub

在设计时或运行时创建按钮

在设计时创建 Button 控件

  1. 用鼠标右键单击 Toolbar 控件,并单击“属性”显示出“属性页”对话框。

  2. 单击“按钮”选项卡,显示出如下图 2.38 所示的对话框:

    图 2.38 Toolbar 控件的属性页

  3. 单击“插入按钮”以加入新的 Button 对象。

  4. 设置适当的属性,例如 Key、Caption、Image 和 ToolTipText。

  5. 单击“样式”框,并选中一种样式,设置 Button 对象的 Style 属性。

在运行时创建 Button 对象的集合

  1. 声明 Button 类型的对象变量。在添加 Button 对象时,该变量用来包含对新产生对象的引用。该引用可以用来设置新 Button 对象的各种属性。

  2. 用带 Add 方法的 Set 语句,将对象变量赋值为新 Button 对象。

  3. 用该对象变量设置新 Button 对象的属性。。

下面的代码在 Form 对象的 Load 事件中创建一个 Button 对象,然后设置新的 Button 对象的 Key、Caption、TooltipText 和 Style 属性

Private Sub Form_Load()
   '声明变量,然后用带 Add 方法的 Set 语句创建
   '新的 Button 对象,将对象变量赋值为该新 Button'用该引用设置对象的属性。
   Dim myButton As Button
   Set myButton = tlbTools.Buttons.Add()
   myButton.Key = "left"
   myButton.Caption = "左对齐"
   myButton.ToolTipText = "左对齐"
   myButton.Style = tbrSeparator
End Sub

提示 同使用对象变量的方式相比,用带参数的 Button 集合的 Add 方法可以更有效地设置属性。这样上述代码可以被改写如下:

tlbTools.Buttons.Add , "left", "左对齐", _
tbrSeparator

按钮的 Style 属性决定按钮的行为

Button 对象的一个重要的属性是 Style 属性。Style 属性决定了按钮的行为特点,并且与按钮相关联的功能可能受到按钮样式的影响。下面列出了五种按钮样式以及它们的用途:

常数 用途
tbrDefault 0 如果按钮所代表的功能不依赖于其它功能,使用 Default 按钮样式。例如,“保存文件”操作可以在任何时候进行。另外,如果按钮被按下,在完成功能后它会自动地弹回。
tbrCheck 1 当按钮代表的功能是某种开关类型时,可使用 Check 样式。例如,在使用 RichTextBox 控件时,被选定的文本可被设置成粗体或非粗体。如果按下了该按钮,那么在再次按下该按钮之前,它将保持按下状态。
tbrButtonGroup 2 当一组功能相互排斥时,可以使用 ButtonGroup 样式。相互排斥的意思是说一组功能同时只能有一个有效。例如,RichTextBox 控件中的文本只能是左对齐、右对齐或居中,在任何时刻都只有一种样式。注意:同一时刻只能按下一个按钮,但所有按钮可能同时处于抬起状态。
tbrSeparator 3 分隔符类型只是创建宽度为八个像素的按钮,此外没有任何功能。分隔符样式的按钮可以将其它按钮分隔开。或者用它将 ButtonGroup 样式的按钮封闭起来。
tbrPlaceholder 4 占位符样式按钮的功能如同“哑”按钮:该按钮的作用是在 Toolbar 控件中占据一定位置,以便显示其它控件(如 ComboBox 控件或 ListBox 控件)。

将控件放入工具栏

在设计时,可以很方便地在 Toolbar 控件中放置其它控件,例如 ComboBox、TextBox 或 OptionButton 控件。

在设计时将其它控件放入 Toolbar 控件

  1. 创建 Button 对象,并赋予适当的属性。

  2. 在工具栏中为希望显示的其它控件留出空档,然后加入 Placeholder 样式的按钮,并将 Width 属性设置为合适的值。

  3. 在占位符按钮的位置上绘制其它控件。

在 Resize 事件中重定位其它控件

如果 Wrappable 属性设置为 True,则当最终用户改变窗体的大小时 Toolbar 控件会自动折行。尽管 Button 对象能够自动折行,但放置在它们上面的其它控件不能。要使其它控件能够折行,则首先要创建 Placeholder 样式的 Button 对象,然后在对应位置绘制其它控件(如上一主题所述)。并在 Form 对象的 Resize 事件中用 Move 方法重定位该控件,如下所示:

Private Sub Form_Resize()
   'Toolbar 名为“tlbRTF'Button 对象的 Key 是“btnFonts'Combobox 名为“cmbFonts' Move 方法将 ComboBox 覆盖在
   'Button 对象的位置上
   With tlbRTF.Buttons("btnFonts")
      cmbFonts.Move .Left, .Top, .Width
      cmbFonts.ZOrder 0
   End With
End Sub

在 ButtonClick 事件中用 Select Case 语句编写按钮的功能

在单击按钮(占位符和分隔符样式的按钮除外)时,发生 ButtonClick 事件。可以用按钮的 Index 属性或 Key 属性标识被单击的按钮。利用这些属性中的任意一个,可以用 Select Case 语句编写按钮的功能。如下面的代码示例所示:

Private Sub tlbRTF_Click(ByVal Button As Button)
   Select Case Button.Key
   Case "OpenFile"
      '调用用户定义的函数打开文件。
      OpenFile 
   Case "Bold"
      '调用用户定义的函数以使文本变为粗体。
      BoldText
   Case Else
      '处理其它情况。
   End Select
End Sub

用 MixedState 表示不确定状态

在某些情况下,应用程序的函数可能返回不确定状态:返回的状态是两种或多种状态的组合。例如,如果用户选中 RichTextBox 中的文本,其中的一部分文本是斜体的,那么代表斜体的按钮既不能按下也不能抬起;因为文本既有斜体又有不是斜体的。为了表示这种不确定状态,需要将 MixedState 属性设置为 True。这将抖动按钮上的图象,以产生第三种状态。

用 ToolTipText 属性设置 ToolTip 文本

当光标在某个 Button 对象上停留(但未按键)时,在按钮上出现称为 ToolTip 的文本。

设计时,在 Toolbar 控件“属性页”中的“工具提示文本”框中键入需要的文本,即可为按钮加入 ToolTip。

运行时,可通过设置 Button 对象的 ToolTipText 属性动态地改变 ToolTip。下面的代码出现在 CommandButton 控件中,它改变按钮的 Key 和 ToolTipText 属性:

Private Sub cmdChangeButton_Click()
   '工具栏名为“tlbFunctions'重新设置 Key 属性为“1 funct”的
   '按钮的 Key  ToolTipText 属性。
   tlbfuncts.Buttons("1 funct"). _
   ToolTipText = "Function 7"

   tlbfuncts.Buttons("1 funct").Key = "7 funct"
End Sub

允许最终用户定制工具栏

如果将 AllowCustomize 属性设置为 True,则最终用户双击该工具栏即可定制它。双击该工具栏将显示出“自定义工具栏”对话框,如下图 2.39 所示。

图 2.39 “自定义工具栏”对话框

另外,调用 Customize 方法也可显示出该对话框。

使用 SaveToolbar 和 RestoreToolbar 方法

如果允许最终用户重新配置 Toolbar 控件,那么需要用 SaveToolbar 和 RestoreToolbar 方法保存和恢复该工具栏。例如,如果有多个用户同时使用同一应用程序,但他们的使用习惯不同,那么可以用 SaveToolbar 方法使用户能够创建自己的定制工具栏。然后创建一个登录过程,用来标识每个用户,并通过 RestoreToolbar 方法,根据登录信息恢复用户个人的工具栏。

SaveToolbar 方法将 Toolbar 控件的当前状态保存到系统注册表中。该方法需要三个参数。第一个参数 key 必须是整数。第二个和第三个参数:subkeyvalue 必须是字符串。要恢复同一 subkey 的工具栏的不同版本,可将 value 参数设置为不同字符串。

下面的代码用两个常数定义了前两个参数。在 Form 对象的 Load 事件中,该代码调用了名为“Login”的过程,返回用户的密码。然后使用返回值恢复先前保存的工具栏。名为“cmdSaveToolbar”的命令按钮用同样的三个参数值保存当前状态。

'声明:SaveToolbar 方法常数。
Const SaveKey = 1
Const SaveSubKey = "MyToolbar"
Dim mSaveVal As String '用来区分用户的 
                       '模块变量。

Private Sub Form_Load()
   '运行可标识用户的登录过程
   '用用户的密码来确定用户的工具栏。
   mSaveVal = LogIn()

   '用常数恢复 Toolbar1 的状态。
   Toolbar1.RestoreToolbar SaveKey, SaveSubKey, _
   mSaveVal
End Sub

Public Function LogIn()
   '向用户询问密码。
   LogIn = InputBox("Password")
End Function

Private Sub cmdSaveToolbar_Click()
   '用相同的常数保存工具栏。
   Toolbar1.SaveToolbar SaveKey, SaveSubKey, mSaveVal
End Sub