ProgressBar 的说明 1:通知用户 TreeView 的充填状态

如果正在使用 TreeView 控件显示数据库,充填该树可能要耗一段时间。在这种情况下,可用 ProgressBar 控件通告用户该操作的状态。

在本说明中,使用 Do Until 循环将 Biblio.mdb 数据库装载到 TreeView 控件中。在该循环开始之前,ProgressBar 控件被显示出来。在循环过程中,ProgressBar 控件的 Value 属性用 Recordset 对象的 PercentPosition 属性进行更新。循环结束时,ProgressBar 控件再次被隐藏起来。

示例应用程序:DataTree.vbp

本主题中的代码示例是从 DataTree.vbp 示例应用程序中得来的,该示例应用程序列在 Samples目录中。

使用到的对象

下面的示例中用到了如下对象:

要在 TreeView 控件充填时显示 ProgressBar,请按照以下步骤执行:

  1. 在 Form 对象的 Load事件中,隐藏 ProgressBar,并将其 Max 属性设置为 100。
  2. 在 TreeView 充填代码中用 Do Until 语句充填该树。

  3. 在循环结束后,隐藏 ProgressBar。

在 Form 对象的 Load 事件中,隐藏 ProgressBar 并将其 Max 属性设置为 100

进度栏通常只在耗时的操作过程中才显示出来,这样做最有效。为做到这一点,可用 Form 对象的 Load 事件将该控件的 Visible 属性设置为 False。

在本说明中,将用到 Recordset 对象的 PercentPosition 属性。既然该属性返回的数字代表了 0 到 100 之间的百分比,因此在窗体被初始化时,应将 Max 属性设置为 100。(按照缺省规定,Min 属性被设置为 0。)下面的代码隐藏 ProgressBar 控件,并将其 Max 属性设置为 100。

Private Sub Form_Load()
   prgLoad.Visible = False
   prgLoad.Max = 100
End Sub

用 Do Until 语句充填树

注意 下面的代码以“TreeView 的说明 1:将 TreeView 绑定到 Biblio.MDB 数据库”中的代码为基础。工作代码在 DataTree.vbp 示例应用程序中也可找到。

要从数据库充填 TreeView 控件,可用 Do Until 循环。该代码的基本流程大致如下:

'假定名为“rsTitles”的 Recordset 对象变量
'已被设置为有效的数据库表。
Do Until rsTitles.EOF
   '用当前记录,创建 Node 对象。
   Set mNode = TreeView.Nodes.Add()
   '设置该 Node 的属性。
   mNode.Text = rsTitles!Fields(1).Value
   '移动到下一记录。
   rsTitles.MoveNext
Loop 

要更新 ProgressBar 控件,可以使用 Recordset 对象的 PercentPosition 属性。该属性以返回记录集中当前记录在所有记录中所在位置的百分数。更新 ProgressBar 的代码应放在循环之中,如下所示:

Do Until rsTitles.EOF
   '更新 ProgressBar 控件。
   prgLoad.Value = rsTitles.PercentPosition

   Set mNode = TreeView.Nodes.Add()
   '设置 Node 的属性。
   mNode.Text = rsTitles!Fields(1).Value
   '移动到下一记录。
   rsTitles.MoveNext
Loop

在循环结束时隐藏 ProgressBar

当 TreeView 控件的 Node 对象装载完毕后,可用如下代码隐藏 ProgressBar 控件:

Private Sub cmdLoad_Click()
   '显示 ProgressBar 控件。
   prgLoad.Visible = True

Do Until rsTitles.EOF
      '更新 ProgressBar 控件。
      prgLoad.Value = rsTitles.PercentPosition

      Set mNode = TreeView.Nodes.Add()
      '设置 Node的属性。
      mNode.Text = rsTitles!Fields(1).Value
      '移动到下一记录。
      rsTitles.MoveNext
   Loop
   '隐藏 ProgressBar 控件。
   prgLoad.Visible = False
End Sub