请教,用Timer显示一个进程条的问题,请帮忙。谢谢

blackfiles 2005-11-13 07:11:54
我想用一个进程条来表示一个虚假的进程,只是想在一个长时间动作开始后,有一个显示给客户看,当动作完成后,进程条退出,表示动作完成。
我用Timer来控制进程条,发现加入一个长时间的动作代码后,并不能得到效果,总是在动作代码运行完后,直接就报出了结束的消息,不能得到想要的进度
的显示。。。

请教,,应该如何实现这个功能。。谢谢
本人代码如下
Dim i As Integer
Dim stopT As Boolean

Private Sub Form_Load()
stopT = False
i = 0
bar.Max = 50
bar.Min = 0
Timer1.Enabled = True
Call doit
End Sub

Private Sub Timer1_Timer()
bar.Value = i
i = i + 1

If i = 50 Then
i = 0
End If
If stopT = True Then
Call stopBar
End If
End Sub

Private Sub stopBar()
Timer1.Enabled = False
MsgBox "over"
End Sub
Private Sub doit()
Dim count As Long
For count = 0 To 10000000
count = count + 1
Next count
stopT = True
End Sub
...全文
253 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackfiles 2005-11-15
  • 打赏
  • 举报
回复
谢谢
northwolves 2005-11-15
  • 打赏
  • 举报
回复
我个人不喜欢用TIMER 和 PROGRESSBAR,一般用两个PICTUREBOX代替

Private Sub Form_Activate()
doit
End Sub

Private Sub Form_Initialize()

Picture1.Move 0, 0, Me.Width, Me.Height / 5
Set Picture2.Container = Picture1
Picture2.AutoRedraw = True
'picture2.picture=loadpicture("c:\123.jpg") '用图片效果更好
Picture1.ScaleWidth = 1000000
Picture2.Move 0, 0, 0, Picture1.Height
Picture2.BackColor = vbRed '
End Sub

Private Sub doit()
Dim i As Long, max As Integer
For i = 0 To 1000000
DoEvents
Picture2.Width = i
Next
MsgBox "over"
End Sub
northwolves 2005-11-15
  • 打赏
  • 举报
回复
可能与执行顺序有关,加在COMMBUTTON事件中情况要好点.
wo22ni 2005-11-14
  • 打赏
  • 举报
回复
进度条定格在50%,,任务完成,马上100%....:)
Summer006 2005-11-14
  • 打赏
  • 举报
回复
长循环中间要加doevents,这样timer就有空执行了。
zhzhq800204 2005-11-14
  • 打赏
  • 举报
回复
同意楼上的,学习。
lionking13520 2005-11-14
  • 打赏
  • 举报
回复
Private Sub Timer1_Timer ()
ProgressBar1.Value = ProgressBar1.Value + 10
If ProgressBar1 >= 1000 Then
ProgressBar1.Enabled =Flase
Timer1.Enabled = False
End If
End Sub
of123 2005-11-14
  • 打赏
  • 举报
回复
Dim stopT As Boolean

Private Sub Form_Load()
stopT = False
bar.Max = 50
bar.Min = 0
Timer1.Enabled = True
Call doit
End Sub

Private Sub Timer1_Timer()

If bar.Value = bar.Max Then
bar.Value = 0
Else
bar.Value = bar.Value + 1
End If
bar.Refresh '强制刷新
If stopT = True Then
bar.Value = bar.Max
Call stopBar
End If
End Sub

Private Sub stopBar()
Timer1.Enabled = False
MsgBox "over"
End Sub

Private Sub doit()
Dim count As Long
For count = 0 To 10000000
count = count + 1
Next count
stopT = True
End Sub

注意,编译成 .exe 文件后执行,才能使 Timer 并发。
射天狼 2005-11-14
  • 打赏
  • 举报
回复
要用doevents语句空闲CPU时间,否则CPU没有时间重绘进度条。

如果你的操作是单一的进程,比如执行一条SQL语句,这样你无法使用DOEVENTS语句,需要用线程,看你执行什么操作了。
blackfiles 2005-11-14
  • 打赏
  • 举报
回复
我试过大家的做法了,好象还是不行啊。。都是在doit()长动作运行完后,才跳出了bar的显示。。???是我做错了么???

请指正。。
laviewpbt 2005-11-13
  • 打赏
  • 举报
回复
For count = 0 To 10000000
count = count + 1
doevents
Next count

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧