vb中循环的菜鸟问题

我用vb制作一个循环计算的程序,由于循环体的计算时间比较长,点击按钮后,出现了假死的症状,在计算完成前只能靠ctrl break来结束,请问:
1.如何让程序在计算时不出现如上症状?(我把do event放在do while后面,似乎不起作用)
2.如何在计算时显示i的值?如:label1.caption = str(i),现在的情况下这句语句没有作用。
3.如何对循环进行计时?我用两次timer相减,得到的数字很大,不知道是以什么作为单位的……
4.如何做一个按钮,点击即刻退出循环?
对于第2个问题:label中的内容在循环时并没有改变,似乎是“没赶上”……我分析不出原因……
还有,如何对timer返回的值与“秒”换算?

1、在循环体里加入Doevents
2、你看不到的原因是计算机一直在做循环,不更新街面上的内容,做好了第一步,第二个就可以实现了,只不过速度很快,你看不清的
3、你可以使用API函数
Private Declare Function GetTickCount Lib "kernel32" () As Long
这个函数时获得计算机从开机到现在所经过的毫秒数
循环开始调用一次,并记录下来,循环结束调用一次并记录下来,然后把两个数相减,就可以得到循环所经过的毫秒数,在除以1000,单位就变成秒了
4、可以把循环退出条件变成Flag=1
循环正常做完,Flag=1
想要提前退出,在command的click事件中设置Flag=1,这样循环就退出了(前提是循环体里有DoEvents语句)
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-07
1、需要将DoEvents放在循环体内也就是:
Do
.....
DoEvents
while .....
2、不太明白,是循环的时候label不能及时显示?
3、Timer函数返回值的数据类型是Single
4、可以定义一个Flag,如:
Public Flag1 as boolean
按钮的代码里加入:Flag1=True
然后再在循环体内检查Flag1的值,如果为True则退出循环,示例代码如下:
Option Explicit
Public Flag1 As Boolean

Private Sub Command1_Click()
Flag1 = True
End Sub

Private Sub Form_Load()
Me.Show
Do
If Flag1 = True Then Exit Do
DoEvents
Loop
MsgBox "循环已经退出"
End Sub

=====================================
对于第二个问题,加了DOEVENTS后,如果你的循环次数比较少,由于计算机执行速度很快,你将看不到它的变化,准确来说是看不清;如果你非要给使用者展示这个变化过程,建议你使用延时,但这样你的程序的效率便会变得很低。下面给你一个延时的API函数:
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
你在DO....While....的循环体内加入“Sleep 毫秒数”即可(毫秒数为Long类型)

至于Timer函数返回的值本来就是秒,两次Timer值相减,得到的便是间隔秒数。本回答被提问者采纳
第2个回答  2008-06-07
1,试下加入Doevents语句
2和3你都没给出代码,不知道你什么原因
4,在循环体里面可以用exit for
如果用一个按钮来控制循环退出,应该需要加入什么条件

VB FOR循环菜鸟问题
在第一层循环,你的x始终是等于4,所以相当于没循环一样,就等价于给x赋值4 所以原程序等价于:x = 4 For j = 1 To 3 x = 3 For k = 1 To 2 x = x + 6 Next k Next j 同理,第二层循环x也是定植,所以也相当于给x赋值,所以源程序等价于:x = 4 x = 3 For k = 1 To ...

一些vb的菜鸟题,求大神讲明为什么这么选(╥ω╥`) ,金币采纳前还会追...
15 题在循环后面 erase 了 X ,所有数组 X 已经被清空了。实际上这里应该报错的。26 题 x 一直没变,三个给a赋值的IF实际上是并列的, a在3个IF里都满足条件,都被赋值,但最后一个IF的赋值才被输出,而最后的IF 里a = x , x=1 所以输出是两个1 ...

菜鸟vb 循环开始和暂停的问题
End If '循环中要执行的功能代码写在这 Next End Sub Private Sub Command1_Click()pauseok = Not pauseok ForNext End Sub Private Sub Form_Load()pauseok = True End Sub 你要无限循环处理啥问题??这个只是范例,那你用do while...loop循环好了,我这个使用过然后弄上去的,看看就好 ...

VB的一个菜鸟问题
如果你在窗体头中已经定义这个变量“n”,此时如果你在Form_Load()过程又定义了一个“n”并赋值,那么此时的所赋的值只在当前Form_Load()过程中起作用,所以在Command1_Click()过程中所取得的值是n的初始值。正确的思路应该是这样:'\/\/ 这是在窗体头上定义的 Dim n as integer Private Sub Form...

VB菜鸟发问了!
start_end: Err = WD_AI_ContBufferReset(card)我觉得在程序前面一定有一句 ON error goto start_end start_end就是错误处理栏,我们通常叫它error bar err就是出现的错误

菜鸟vb 循环开始和暂停的问题
循环 Basic中的循环语句 在 VBScript 中可使用下列循环语句: Do...Loop: 当(或直到)条件为 True 时循环。 While...Wend: 当条件为 True 时循环。 For...Next: 指定循环次数,使用计数器重复运行语句。 For Each...Next: 对于集合中的每项或数组中的每个元素,重复执行一组...

VB菜鸟问题时间每过一天变量加1
窗体上加个Timer,把Timer的Interval设置为60000然后Private Sub Timer1_Timer()Static N As Long N = N + 1 If N = 24 * 60 Then a = a + 1 N = 0 End IfEnd Sub

vb小程序!关于无限循环死机的问题,菜鸟,
这10亿你是怎么计算出来的?编程中循环不能用实际中计数的方式...还得考虑内存,CPU优先级,而且这个运行不能靠显示多少来确认的,如果是死循环不要说秒,就是以毫秒算都不及亿数!

VBA 编程问题菜鸟,显示(运行时错误'13' 类型不匹配)请大神帮助!!!程序...
你这段程序小问题比较多 1、首先你定义o As Integer,但是后面o = ComboBox2.Text 和o = "Audi C7"都是赋值给o文本格式的数据,虽然VB支持类型强制转换,但不建议你这么写,要养成好习惯;2、Sheets(i).Name = Sheets("Audi C7")这一句一定会产生数据类型错误,因为Sheets("Audi C7")返回的...

VB6.0的菜鸟问题
就是每隔一段时间 就执行一次代码~如 Private Sub Form_Load()Timer1.Interval = 500 ’设置每一次执行的间隔 ’这里500代表半秒钟 End Sub Private Sub Timer1_Timer()Print "hello"End Sub ’效果为 每半秒钟在屏幕上打印hello 不知道懂了么?

相似回答