Foxtable(狐表)用户栏目专家坐堂 → [求助]执行代码总是等全部执行完毕才显示?


  共有12186人关注过本帖树形打印复制链接

主题:[求助]执行代码总是等全部执行完毕才显示?

帅哥哟,离线,有人找我吗?
qq121454970
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:880 积分:9011 威望:0 精华:3 注册:2012/4/22 18:06:00
[求助]执行代码总是等全部执行完毕才显示?  发帖心情 Post By:2013/3/24 23:20:00 [只看该作者]

Dim p AsWinForm.ProgressBar
p = e.Form.Controls(
"ProgressBar1")
p.Maximum =
MainTable.Rows.Count '设置最大值
p.Minimum =
0 '设置最小值
p.Value =
0 '设置当前值
For
i As integer = 0 To MainTable.Rows.Count - 1
   
MainTable.Rows(i)("第一列") = i
   
If i Mod 100 = 0
        p.Value = i
'当前值为已经完成的行数
   
End
If
Next

 

 

上段代码在执行的时候会实时显示,为什么下一段的显示值不会变呢?

For i As integer = 0 To 100

     e.Form.Controls("Label").Text = i

     End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
qq121454970
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:880 积分:9011 威望:0 精华:3 注册:2012/4/22 18:06:00
  发帖心情 Post By:2013/3/24 23:26:00 [只看该作者]

想做一个动态显示进度的Label 文本 ,弄不出来,唉

 回到顶部
帅哥哟,离线,有人找我吗?
hui986
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:495 积分:3437 威望:0 精华:0 注册:2012/3/29 21:15:00
  发帖心情 Post By:2013/3/25 2:41:00 [只看该作者]

应该是如下的原因

 

 

DoEvents语句

新建一个窗口,增加一个标签和一个按钮,按钮的Click事件设为:

e.Form.Controls("Label1").Text = "正在增加行,请稍后..."
CurrentTable
.AddNew(10000)
e.Form.Controls(
"Label1").Text =
"已经完成."

 

打开窗口单击按钮,按道理在增加行的时候,标签应该显示“正在增加行,请稍后...”,可实际上标签只是在增加行结束的时候,显示“已经完成.”。这是为什么呢?这是因为Windows是多任务的,绘制控件属于优先级别较低的任务,直到我们执行完所有的代码,Windows才会去绘制控件,从而出现上述异常。

有什么办法让绘制控件的代码即刻生效呢?有,我们只需在代码中间插入一行:

Application.DoEvents

即刻暂停代码的执行,重新绘制控件后,继续执行代码。

所以我们原来的代码应该改为:

e.Form.Controls("Label1").Text = "正在增加行,请稍后..."
Application.DoEvents()

CurrentTable
.AddNew(10000)
e.Form.Controls(
"Label1").Text =
"已经完成."


 回到顶部
客人(58.215.*.*)
  4楼


  发帖心情 Post By:2013/3/25 8:52:00 [只看该作者]

谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
qq121454970
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:880 积分:9011 威望:0 精华:3 注册:2012/4/22 18:06:00
  发帖心情 Post By:2013/3/25 22:22:00 [只看该作者]

效果非常好,谢谢


 回到顶部