vb中循环的菜鸟问题

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

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值相减,得到的便是间隔秒数。

1,试下加入Doevents语句
2和3你都没给出代码,不知道你什么原因
4,在循环体里面可以用exit f