创建跨网进程的应用程序经常使用一个“超时”间隔。当达到该预先确定的时间间隔之前,会询问用户取消该操作,还是继续等待。用图形表示该超时间隔的一个方法,就是使用 ProgressBar 控件。
下面的示例使用了如下控件:
要创建反映超时间隔的进度栏,请按照以下步骤执行:
在 Form 对象的 Load 事件中,设置 Timer 控件的 Interval 属性。由于以秒为单位为进程计时更有用,故将 Interval 设置为 1000(毫秒,即 1 秒)。这样,每隔一秒,ProgressBar 控件的 Value 属性被更新一次。
tmrTimer.Interval = 1000
在 Load 事件中还应设置 ProgressBar 的 Max 属性。Max 属性的值应为 Timer 停止之前,希望它持续计时的时间。同时为准确地反映经过的时间,ProgressBar 的 Min 属性应设置为 1。
Load 事件还被用来隐藏 ProgressBar,即将其 Visible 属性设置为 False。下面的代码显示了包括前面的代码在内的整个 Load 事件代码。
Private Sub Form_Load() prgBar1.Visible = False tmrTimer.Interval = 1000 prgBar1.Max = 10 'Timer将运行10秒钟。End Sub
要启动 Timer,必须使用 Enabled 属性。在开始为任何过程计时的同时,应显示 ProgressBar,如下所示:
Private Sub cmdBegin_Click()
prgBar1.Visible = True
tmrTimer.Enabled = True
End Sub
在 Timer 事件中,声明静态变量。这样就能够在每次发生 Timer 事件时,方便地递增该变量。同时由于不希望从 0 开始计数,所以使用 IsEmpty 函数判断后将该变量设置为 1,如下所示:
Static intTime
If IsEmpty(intTime) Then intTime = 1
每次发生 Timer 事件时,ProgressBar 的 Value 属性必须设置为该静态变量的值:
prgBar1.Value = intTime
在 ProgressBar 的 Value 属性被更新后,必须检查该变量是否已经达到了超时的限制。如果已经达到,该变量必须被重新设置为 1,ProgressBar 控件应被隐藏,并且它的 Value 属性应重新设置为 1,而 Timer 控件也应停用。如果没有达到限制,则该变量递增一。这些步骤都在 Timer 事件中,用 If 语句实现,如下所示:
Private Sub tmrTimer_Timer() Static intTime '声明静态变量。'第一次执行时,该变量应为空值。'如果它是空变量,将其设置为1。If IsEmpty(intTime) Then intTime = 1prgBar1.Value = intTime '更新ProgressBar。If intTime = prgBar1.Max ThenTimer1.Enabled = FalseprgBar1.Visible = FalseintTime = 1prgBar1.Value = prgBar1.MinElseintTime = intTime + 1End IfEnd Sub
下面是在本主题中描述的示例的完整代码:
Private Sub Form_Load() prgBar1.Visible = False tmrTimer.Interval = 1000 prgBar1.Max = 10 'Timer将运行10秒钟。End SubPrivate Sub cmdBegin_Click()prgBar1.Visible = TruetmrTimer.Enabled = TrueEnd SubPrivate Sub tmrTimer_Timer()Static intTime '声明静态变量。'第一次执行时,该变量应为空值。'如果它是空变量,将其设置为1。If IsEmpty(intTime) Then intTime = 1prgBar1.Value = intTime '更新ProgressBar。If intTime = prgBar1.Max ThenTimer1.Enabled = FalseprgBar1.Visible = FalseintTime = 1prgBar1.Value = prgBar1.MinElseintTime = intTime + 1End IfEnd Sub