Tabstrip 应用实例:创建选项卡式对话框

TabStrip 控件用来创建包含多个选项卡的对话框。选项卡之间通常具有一定关系,属于某一大类,因此需要将它与其它选项卡放在同一对话框中。在该应用实例中,创建了用来设置 RichTextBox 的字体和缩进的选项卡式对话框。

下面的代码中使用了如下对象:

创建选项卡式对话框

  1. 创建两个窗体,名为“frmRTF”的包含 RichTextbox,名为“frmTab”的包含 TabStrip 控件。

  2. 在设计时,在 TabStrip 控件中创建两个 Tab 对象。

  3. 在“frmTab”中创建名为“fraTab”的 Frame 控件数组。

  4. 在 fraTab (0) 中绘制 ComboBox,在 fraTab (1) 中绘制两个 OptionButton 控件。

  5. 在Load 事件中用 Move 方法放置 Frame 控件。

  6. 在 TabStrip 控件的 Click 事件中,用 SelectedItem 属性确定被单击的 Tab 的索引。

  7. 在 ZOrder 方法中,用该索引可将合适的 Frame 显示在最前面。

创建两个窗体,名为“frmRTF”的包含 RichTextbox,名为“frmTab”的包含 TabStrip 控件

本应用实例需要两个窗体:名为“frmRTF”的包含 RichTextBox 控件,另一个名为“frmTab”的包含 TabStrip 控件。

创建两个 Form 对象

  1. 在“文件”菜单中单击“新建工程”,以显示“新建工程”对话框。

  2. 双击“标准EXE Project”图标,创建名为“Form1”的新窗体。

  3. 如果没有显示“属性”窗口,按下 F4 键即可显示出来。

  4. 单击“名称”框,并键入“frmRTF”。

  5. 在窗体中绘制 RichTextBox 控件。

    注意 必须先将 RichTextBox (RichTx32.ocx) 装入工具栏。详细信息请参阅“加载 ActiveX 控件”。

  6. 在“属性”页窗口中,单击“名称”框,并键入“rtfData”。

  7. 在“工程资源管理器”窗口中单击“添加窗体”以显示“添加窗体”对话框。

  8. 双击“添加窗体”图标,在工程中加入另一窗体。

  9. 在“属性”窗口中,单击“名称”框并键入“frmTab”。

  10. 在 frmTab 中绘制 TabStrip 控件,并命名为“tabRTF”。

还必须编写显示第二个窗体的代码。一个简单的办法是在第一个 Form 对象 (frmRTF) 的 DblClick 事件中使用 Show 方法,如下所示:

Private Sub Form_DblClick()
   frmTab.Show
End Sub

设计时在 TabStrip 控件中创建两个 Tab 对象

在设计时和运行时均可创建 Tab 对象。在本应用实例中,要在设计时创建两个选项卡。用鼠标右键单击 TabStrip 控件,并单击“属性”以显示“属性页”对话框。然后单击“选项卡”选项卡,并单击“插入选项卡”两次。请注意为它们赋予合适的标题:“字体”和“缩进”。

在 frmTab 中创建名为“fraTab”的控件数组

TabStrip 控件通过管理 Tab 对象实现其功能。每个 Tab 对象与出现在该选项卡的客户区中的容器控件相关联。用控件数组创建这些容器控件最为方便。本应用实例中,在 TabStrip 控件所在的窗体中绘制 Frame 控件,并命名为“fraTab”。

创建控件数组

  1. 在 frmTab 中创建 Frame 控件。

  2. 单击“属性”窗口中的“名称”框,并键入“fraTab”。

  3. 单击 Frame 控件,并按 CTRL+C 键或单击“编辑”菜单中的“复制”将其复制到剪贴板中。

  4. 按 CTRL+V 键将同一控件粘贴回该窗体。这时将弹出对话框询问是否需要创建控件数组,请单击“”。

在 fraTab(0) 中绘制 ComboBox 控件,在 fraTab(1) 中绘制两个 OptionButton 控件

在名为“fraTab(0)”的控件中绘制 ComboBox 控件,并将其命名为“cmbFonts”。用下面的代码可以将系统中可以使用的所有字体列入该 ComboBox:

Private Sub Form_Load()
   Dim i   '声明变量。
   '确定字体的数目。
   For i = 0 To Printer.FontCount - 1  
      '将每种字体加入列表框中。
      cmbFonts.AddItem Printer.Fonts(I) 
   Next i
   cmbFonts.ListIndex = 0
End 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 = 500
   frmRTF.rtfData.SelBullet = True
End Sub

Private Sub optNormal_Click()
   frmRTF.rtfData.SelBullet = False 
End Sub

在 Load 事件中使用 Move 方法放置 Frame 控件

为了在客户区上放置 Frame 控件,可以在 Form 对象的 Load 事件中使用 Move 方法,如下所示:

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
   
   '将第一个 fraTab 控件显示在最前面。
   fraTab(0).ZOrder 0
End Sub

在 TabStrip 控件的 Click 事件中,用 SelectedItem 属性确定发生单击的 Tab 的索引

可以用 SelectedItem 属性确定被单击的 Tab 对象。该属性返回被单击的选项卡的引用。然而,Tabs 集合是基于 1 的集合(集合下标以 1 开始),而 fraTab 数组是基于 0 的集合。要使它们同步,需要将 Index 减 1,如下所示:

   Private Sub tabRTF_Click()
      fraTab(tabRTF.SelectedItem.Index - 1).ZOrder 0
   End 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 i

   cmbFonts.ListIndex = 0
   
   'TabStrip 名为“tabRTF”。
   'Frame control 名为“fraTab”。
   For i = 0 To fraTab.Count - 1
   With fraTab(i)
      .Move tabRTF.ClientLeft, _
      tabRTF.ClientTop, _
      tabRTF.ClientWidth, _
      tabRTF.ClientHeight
   End With
   Next i

   '将第一个 fraTab 控件显示在最前面。
   fraTab(0).ZOrder 0
End Sub

Private Sub cmbFonts_Click()
   frmRTF.rtfData.SelFontName = cmbFonts.Text
End Sub

Private Sub optBullet_Click()
   frmRTF.rtfData.BulletIndent = 500
   frmRTF.rtfData.SelBullet = True
End Sub

Private Sub optNormal_Click()
   frmRTF.rtfData.SelBullet = False
   
End Sub

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

下面的代码放入名为“frmRTF”的窗体中。

Private Sub Form_DblClick()
   frmTab.Show
End Sub