Option Explicit '快速停止 Private Declare Function GetInputState Lib "user32" () As Long Private m_UserCancel As Boolean Private Sub cmdCancel_Click() m_UserCancel = True End Sub Private Sub cmdGo_Click() Dim lCounter As Long m_UserCancel = False Me.MousePointer = vbHourglass For lCounter = 0 To 10000000 lblT.Caption = CStr(lCounter) 'any long loop that may need to be interrupted If lCounter Mod 100 Then If GetInputState <> 0 Then 'a mouse or keyboard event is in the 'message queue so we call DoEvents 'so it can be processed DoEvents If m_UserCancel Then Exit For End If End If lblT.Refresh Next lCounter Me.MousePointer = vbDefault End Sub 修改这个例程即可!!
Option Explicit Private m_UserCancel As Boolean Private Sub cmdCancel_Click() m_UserCancel = True End Sub Private Sub cmdGo_Click() m_UserCancel = False Me.MousePointer = vbHourglass for ....... '很耗时的循环 DoEvents If m_UserCancel Then Exit For next ... Me.MousePointer = vbDefault End Sub
dim exit_sub as booleanprivate sub form_load() exit_sub = false end subprivate sub command1_click() exit_sub = true end subprivate sub 过程名(......) for ....... doevents if exit_sub then exit for '很耗时的循环 next ... end sub command1为退出循环的按钮,在执行程序时请关闭其它按钮,建议只保留推出循环的按钮。否则程序可能重复执行,产生无法预料的结果。
Dim status As Boolean, i As Double Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If status = False Then status = True For i = 1 To 10000 DoEvents Next Else i = 10000 status = False Exit Sub End If End Sub方法比较笨,呵呵,不过我认为可以设一个全局标志,在 FOR循环里判断,如果为真就退出循环,这样应该可以吧
将过程中所有变量定义为模块级的,然后写如下代码: private exit as boolean private as integer private sub command1_click()'按下该键停止过程 exit=true end subprivate sub command2_click()'按下该键继续过程 select case case 1 goto label1 case 2 goto label2 ...... exit=false end select end subprivate sub 过程名(......) for ....... '很耗时的循环的一部分 doevents if exit=true then =1 exit sub end if label1:
'很耗时的循环的一部分 doevents if exit=true then =2 exit sub end if label2: next ... end sub
'快速停止
Private Declare Function GetInputState Lib "user32" () As Long
Private m_UserCancel As Boolean
Private Sub cmdCancel_Click()
m_UserCancel = True
End Sub
Private Sub cmdGo_Click()
Dim lCounter As Long
m_UserCancel = False
Me.MousePointer = vbHourglass
For lCounter = 0 To 10000000
lblT.Caption = CStr(lCounter)
'any long loop that may need to be interrupted
If lCounter Mod 100 Then
If GetInputState <> 0 Then
'a mouse or keyboard event is in the
'message queue so we call DoEvents
'so it can be processed
DoEvents
If m_UserCancel Then Exit For
End If
End If
lblT.Refresh
Next lCounter
Me.MousePointer = vbDefault
End Sub
修改这个例程即可!!
Private m_UserCancel As Boolean
Private Sub cmdCancel_Click()
m_UserCancel = True
End Sub
Private Sub cmdGo_Click()
m_UserCancel = False
Me.MousePointer = vbHourglass
for .......
'很耗时的循环
DoEvents
If m_UserCancel Then Exit For
next ...
Me.MousePointer = vbDefault
End Sub
exit_sub = false
end subprivate sub command1_click()
exit_sub = true
end subprivate sub 过程名(......)
for .......
doevents
if exit_sub then exit for
'很耗时的循环
next ...
end sub
command1为退出循环的按钮,在执行程序时请关闭其它按钮,建议只保留推出循环的按钮。否则程序可能重复执行,产生无法预料的结果。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If status = False Then
status = True
For i = 1 To 10000
DoEvents
Next
Else
i = 10000
status = False
Exit Sub
End If
End Sub方法比较笨,呵呵,不过我认为可以设一个全局标志,在 FOR循环里判断,如果为真就退出循环,这样应该可以吧
private exit as boolean
private as integer
private sub command1_click()'按下该键停止过程
exit=true
end subprivate sub command2_click()'按下该键继续过程
select case
case 1
goto label1
case 2
goto label2
......
exit=false
end select
end subprivate sub 过程名(......)
for .......
'很耗时的循环的一部分
doevents
if exit=true then
=1
exit sub
end if
label1:
'很耗时的循环的一部分
doevents
if exit=true then
=2
exit sub
end if
label2:
next ...
end sub