TabStrip 控件的功能与笔记本的分页签或文件夹上的标签差不多。使用 TabStrip 控件,就能够将应用程序中的窗口或对话框的同一区域定义为多页。
控件由 Tabs 集合中的一个或多个 Tab 对象构成。无论在设计时还是运行时,都能够通过设置属性来影响 Tab 对象的外观;在运行时,还能够通过调用一些方法来添加和删除 Tab 对象。
为标识选项卡的功能,可以将 ImageList 控件中的图象与 Tab 对象联系起来。首先,必须将 ImageList 控件与 TabStrip 控件相关联,这既可以在设计时完成,也可以在运行时完成。
在设计时将 ImageList 控件与 TabStrip 控件相关联:
Private Sub Form_Load() 'TabStrip
控件名为“tabRTF
”,'ImageList
控件名为“imlRTF
”。tabRTF.ImageList = imlRTF
End Sub
在设计时和运行时均可创建 Tab 对象。在设计时创建 Tab 对象,需要使用“属性页”对话框。
在设计时创建 Tab 对象
图 2.36 “TabStrip 属性页”
要在运行时创建 Tab 对象,需要对 Tab 对象使用 Add 方法。
注意 在缺省情况下,预先已经创建了一个 Tab 对象。
在运行时创建 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
选项卡式对话框中可以包含多个 Tab 对象。正如上面看到的,Frame 控件(或其它容器控件)应与每个 Tab 对象相关联。为了高效地管理众多的 Tab 对象和容器控件,可使用如下策略:
用来将合适的容器显示在最前面的代码可能类似于下面的代码:
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 属性决定 TabStrip 控件的外观象
笔记本的标签,
还是下压式按钮。
下表列出了它们各自的优点:
样式 | 用途 |
Tabs | 用 Tabs 样式可以创建选项卡式对话框。如果使用该样式,将绘制出整个的选项卡式对话框,包括客户区。必须用代码确定在客户区中显示什么 |
Buttons | 用 Buttons 样式可以创建工具栏或任务条,也就是说,不需要客户区,希望将按钮作为界面元素。或者,有时候不需要事先绘制的客户区,则可设置为 Buttons 样式。 |
TabStrip 控件的另一特性是 MultiRow 属性。如果将该属性设置为 True,那么大量的 Tab 对象就能够分多行显示,如下所示:
如果 MultiRow 属性被设置为 False,一组选项卡只能出现在同一行中,这时在最右端会出现一对滚动按钮:
TabWidthStyle 属性决定每行的外观。并且,如果 TabWidthStyle 设置为 Fixed,则还可以用 TabFixedHeight 和 TabFixedWidth 属性为 TabStrip 控件中的所有选项卡设置相同的高度和宽度。