TabStrip 控件用来创建包含多个选项卡的对话框。选项卡之间通常具有一定关系,属于某一大类,因此需要将它与其它选项卡放在同一对话框中。在该应用实例中,创建了用来设置 RichTextBox 的字体和缩进的选项卡式对话框。
下面的代码中使用了如下对象:
创建选项卡式对话框
本应用实例需要两个窗体:名为“frmRTF”的包含 RichTextBox 控件,另一个名为“frmTab”的包含 TabStrip 控件。
创建两个 Form 对象
注意 必须先将 RichTextBox (RichTx32.ocx) 装入工具栏。详细信息请参阅“加载 ActiveX 控件”。
还必须编写显示第二个窗体的代码。一个简单的办法是在第一个 Form 对象 (frmRTF) 的 DblClick 事件中使用 Show 方法,如下所示:
Private Sub Form_DblClick()
frmTab.Show
End Sub
在设计时和运行时均可创建 Tab 对象。在本应用实例中,要在设计时创建两个选项卡。用鼠标右键单击 TabStrip 控件,并单击“属性”以显示“属性页”对话框。然后单击“选项卡”选项卡,并单击“插入选项卡”两次。请注意为它们赋予合适的标题:“字体”和“缩进”。
TabStrip 控件通过管理 Tab 对象实现其功能。每个 Tab 对象与出现在该选项卡的客户区中的容器控件相关联。用控件数组创建这些容器控件最为方便。本应用实例中,在 TabStrip 控件所在的窗体中绘制 Frame 控件,并命名为“fraTab”。
创建控件数组
在名为“fraTab(0)”的控件中绘制 ComboBox 控件,并将其命名为“cmbFonts”。用下面的代码可以将系统中可以使用的所有字体列入该 ComboBox:
Private Sub Form_Load() Dim i '声明变量。'确定字体的数目。For i = 0 To Printer.FontCount - 1'将每种字体加入列表框中。cmbFonts.AddItem Printer.Fonts(I)Next icmbFonts.ListIndex = 0End Sub
用下面的代码为 RichTextbox 控件设置 SelFontName 属性:
Private Sub cmbFonts_Click()
frmRtf.rtfData.SelFontName = cmbFonts.Text
End Sub
在名为“fraTab(0)”的 Frame 控件中绘制两个 OptionButton 控件。将第一个 OptionButton 控件命名为“optNormal”,并将其 Caption 属性设置为“Normal”。将第二个控件命名为“optBullet”,并将其 Caption 属性设置为“Bullet”。这些控件的代码分别将 SelBullet 属性设置为 True 或 False。代码分别如下:
Private Sub optBullet_Click() 'Form对象的ScaleMode被设置为“缇”。frmRTF.rtfData.BulletIndent = 500frmRTF.rtfData.SelBullet = TrueEnd SubPrivate Sub optNormal_Click()frmRTF.rtfData.SelBullet = FalseEnd Sub
为了在客户区上放置 Frame 控件,可以在 Form 对象的 Load 事件中使用 Move 方法,如下所示:
Private Sub Form_Load() 'TabStrip名为“tabRTF”。'Frame控件名为“fraTab”。For i = 0 To fraTab.Count - 1With fraTab(i).Move tabRTF.ClientLeft, _tabRTF.ClientTop, _tabRTF.ClientWidth, _tabRTF.ClientHeightEnd WithNext I'将第一个fraTab控件显示在最前面。fraTab(0).ZOrder 0End Sub
可以用 SelectedItem 属性确定被单击的 Tab 对象。该属性返回被单击的选项卡的引用。然而,Tabs 集合是基于 1 的集合(集合下标以 1 开始),而 fraTab 数组是基于 0 的集合。要使它们同步,需要将 Index 减 1,如下所示:
Private Sub tabRTF_Click()fraTab(tabRTF.SelectedItem.Index - 1).ZOrder 0End Sub
提示 在设计时,通过设置 Frame 控件数组的 Index 属性,可以将其变为基于 1 的数组。这样上述代码就变为:
fraTab(tabRTF.SelectedItem.Index).ZOrder 0
全部代码显示如下:
Private Sub Form_Load() Dim i As Integer'声明变量。'确定字体的总数。For i = 0 To Printer.FontCount - 1'将每个字体加入列表框。cmbFonts.AddItem Printer.Fonts(i)Next icmbFonts.ListIndex = 0'TabStrip名为“tabRTF”。'Frame control名为“fraTab”。For i = 0 To fraTab.Count - 1With fraTab(i).Move tabRTF.ClientLeft, _tabRTF.ClientTop, _tabRTF.ClientWidth, _tabRTF.ClientHeightEnd WithNext i'将第一个fraTab控件显示在最前面。fraTab(0).ZOrder 0End SubPrivate Sub cmbFonts_Click()frmRTF.rtfData.SelFontName = cmbFonts.TextEnd SubPrivate Sub optBullet_Click()frmRTF.rtfData.BulletIndent = 500frmRTF.rtfData.SelBullet = TrueEnd SubPrivate Sub optNormal_Click()frmRTF.rtfData.SelBullet = FalseEnd SubPrivate Sub tabRTF_Click()fraTab(tabRTF.SelectedItem.Index - 1).ZOrder 0End Sub
下面的代码放入名为“frmRTF”的窗体中。
Private Sub Form_DblClick()
frmTab.Show
End Sub