使用 TabStrip 控件

TabStrip 控件的功能与笔记本的分页签或文件夹上的标签差不多。使用 TabStrip 控件,就能够将应用程序中的窗口或对话框的同一区域定义为多页。

可能的用途

Tabs 集合

控件由 Tabs 集合中的一个或多个 Tab 对象构成。无论在设计时还是运行时,都能够通过设置属性来影响 Tab 对象的外观;在运行时,还能够通过调用一些方法来添加和删除 Tab 对象。

将 ImageList 控件与 TabStrip 控件相关联

为标识选项卡的功能,可以将 ImageList 控件中的图象与 Tab 对象联系起来。首先,必须将 ImageList 控件与 TabStrip 控件相关联,这既可以在设计时完成,也可以在运行时完成。

在设计时将 ImageList 控件与 TabStrip 控件相关联:

  1. 在 ImageList 控件中包含所需的图象。

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

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

  4. 要在运行时将 ImageList 控件与 TabStrip 控件相关联,只需将 ImageList 属性设置为 ImageList 控件的名称即可,如下所示:
Private Sub Form_Load()
   'TabStrip 控件名为“tabRTF”,
   'ImageList 控件名为“imlRTF”。
   tabRTF.ImageList = imlRTF
End Sub

在设计时或运行时创建 Tab

在设计时和运行时均可创建 Tab 对象。在设计时创建 Tab 对象,需要使用“属性页”对话框。

在设计时创建 Tab 对象

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

  2. 单击“选项卡”以显示“选项卡”页,如下图 2.36 所示:

图 2.36 “TabStrip 属性页”

在运行时用 Add 方法创建 Tab 对象

要在运行时创建 Tab 对象,需要对 Tab 对象使用 Add 方法。

注意 在缺省情况下,预先已经创建了一个 Tab 对象。

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

  1. 声明一个 Tab 类型的变量,在添加每个 Tab 对象之后,该变量能够包含对新创建对象的引用。可以使用该引用为新创建的 Tab 对象设置各种属性。

  2. 使用带 Add 方法的 Set 语句,将对象变量设置为新的 Tab 对象。

  3. 使用对象变量,设置新的 Tab 对象的属性。

下面的代码用 Form 对象的 Load 事件创建了两个 Tab 对象,然后设置了新 Tab 对象的 Caption、Image 和 Key 属性。

Private Sub Form_Load()
   'TabStrip 控件被命名为“tabData”。
   '声明变量,然后用带 Add 方法的 Set
   '语句创建新的 Tab 对象,
   '然后将对象变量设置为新的 Tab'并用它设置属性。
   Dim tabX As Tab
   'Tab 1: Find 文本。
   Set tabX = tabData.Tabs.Add()
   tabX.Key = "find"
   tabX.Caption = "Find"
   tabX.Image = "Find" '假定存在该图象。

   'Tab 2: 绘画对象。
   Set tabX= tabData.Panels.Add()
   tabX.Key = "draw"
   tabX.Caption = "Draw"
   tabX.Image = "draw" '假定存在该图象
End Sub

提示 如果直接用 Add 方法,而不用对象变量来设置属性,效率会更高。在这种情况下,上述代码可以改写为:

tabData.Tabs.Add , "find", "Find", "find"
tabData.Tabs.Add , "draw", "Draw", "draw"

在客户区中放置容器控件

TabStrip 控件通常用来创建选项卡式对话框。该对话框每页由选项卡客户区构成,如下图所示:

在运行时,如果用户单击选项卡,则必须对客户区进行编程,用一组不同的容器控件重新配置客户区(在下面的“管理 Tabs 和容器控件”中讨论)。

在设计时,可以在窗体中绘制容器控件,例如 PictureBox 或 Frame 控件。如果使用 Frame 控件,则可以在运行时将其 BorderStyle 属性设为不可见的。通过复制并粘贴同一个控件,来创建一组控件;需要为每个 Tab 对象创建一个控件。

在每个容器控件上,绘制应出现在选项卡中的控件。窗体看起来可能类似于下面的图 2.37:

图 2.37 在设计时具有两个 PictureBox 控件的 TabStrip

在创建了容器控件之后,需要用另外一种技术将它们放置在 TabStrip 控件的客户区:使用 Move 方法,并带上 Tabstrip 的 ClientLeft、ClientTop、ClientWidth 和 ClientHeight 属性,如下所示:

Private Sub Form_Load()
   'TabStrip 控件名为“tabRTF”。
   'Frame 控件名为“fraTab”。
   For i = 0 To fraTab.Count - 1
   With fraTab(i)
      .Move tabRTF.ClientLeft, _
      tabRTF.ClientTop, _
      tabRTF.ClientWidth, _
      tabRTF.ClientHeight
   End With
   Next i
End Sub

管理 Tabs 和 容器控件

选项卡式对话框中可以包含多个 Tab 对象。正如上面看到的,Frame 控件(或其它容器控件)应与每个 Tab 对象相关联。为了高效地管理众多的 Tab 对象和容器控件,可使用如下策略:

  1. 在设计时,创建所需要的全部 Tab 对象。

  2. 创建容器控件的控件数组,一个数组成员对应于一个 Tab 对象。

  3. 在每个容器控件中,绘制在选项卡页上的控件。

  4. 在运行时,使用控件的 SelectedItem 属性确定被单击的 Tab 对象的索引。

  5. 用 ZOrder 方法将适当的容器控件显示在最前面。

用来将合适的容器显示在最前面的代码可能类似于下面的代码:

Private Sub tabRTF_Click()
   picRTF(tabRTF.SelectedItem.Index - 1).ZOrder 0
End Sub

提示 在设计时,可将控件数组的 Index 属性设置为基于 1 的数组。因为 Tabs 集合也是基于 1 的集合,所以上述代码可以改写如下:

picRTF(TabRTF.SelectedItem.Index).ZOrder 0

详细信息 上述策略的示例代码,请参阅“TabStrip 应用实例:创建选项卡式对话框”。

选项卡的 Style 属性:Buttons 或 Tabs

Style 属性决定 TabStrip 控件的外观象

笔记本的标签,

还是下压式按钮。

下表列出了它们各自的优点:

样式 用途
Tabs 用 Tabs 样式可以创建选项卡式对话框。如果使用该样式,将绘制出整个的选项卡式对话框,包括客户区。必须用代码确定在客户区中显示什么
Buttons 用 Buttons 样式可以创建工具栏或任务条,也就是说,不需要客户区,希望将按钮作为界面元素。或者,有时候不需要事先绘制的客户区,则可设置为 Buttons 样式。

多行选项卡

TabStrip 控件的另一特性是 MultiRow 属性。如果将该属性设置为 True,那么大量的 Tab 对象就能够分多行显示,如下所示:

如果 MultiRow 属性被设置为 False,一组选项卡只能出现在同一行中,这时在最右端会出现一对滚动按钮:

TabWidthStyle 属性决定每行的外观。并且,如果 TabWidthStyle 设置为 Fixed,则还可以用 TabFixedHeight 和 TabFixedWidth 属性为 TabStrip 控件中的所有选项卡设置相同的高度和宽度。