如何在AutoIt中终止循环?第二个While循环异常原因咨询
AutoIt循环终止方法及代码问题解答
一、AutoIt终止循环的常用方式
ExitLoop:终止当前所在循环,直接执行循环后续代码ContinueLoop:跳过当前循环剩余代码,直接进入下一次循环迭代- 修改循环条件变量:比如将
While $bLoop中的$bLoop设为False,让循环条件不成立从而退出 Exit/ExitProcess:直接终止整个脚本,不属于单纯的循环终止操作
二、代码疑问解答
1. 第二个While循环为何无法正常运行?
问题出在第一个While循环的逻辑上:
- 初始
$iMsgBoxAnswer = 1,导致每次循环都会触发If $iMsgBoxAnswer = 1 Then ContinueLoop,直接跳过后续的确认弹窗和$bLoop变量修改代码 - 同时,GUI消息处理的
Switch语句中没有处理$idExitt(EXIT按钮)的事件,点击EXIT按钮后不会改变$iMsgBoxAnswer的值,ContinueLoop会一直生效,第一个循环永远无法终止,第二个循环自然得不到执行机会
2. 为何点击第一个循环中的EXIT按钮后,第二个循环才会生效?
原代码本身不会出现这个现象,因为EXIT按钮的事件没有被处理。如果你的实际操作中出现了该情况,大概率是代码中遗漏了$idExitt的事件处理逻辑。当补充如下代码后:
Case $idExitt $iMsgBoxAnswer = 0 ; 取消ContinueLoop的触发条件
点击EXIT按钮时,$iMsgBoxAnswer被设为0,ContinueLoop不再执行,代码会执行后续的确认弹窗;当你点击弹窗中的Yes后,$bLoop被设为False,第一个循环终止,程序才会执行第二个While循环。
三、修正后的完整代码
Global $test $choice = GUICreate("Custom MsgBox", 225, 80) GUICtrlCreateLabel("Please select a button.", 10, 10) Local $idYess = GUICtrlCreateButton("YES", 10, 50, 65, 25) Local $idNoo = GUICtrlCreateButton("NON", 80, 50, 65, 25) Local $idExitt = GUICtrlCreateButton("EXIT", 150, 50, 65, 25) GUISetState(@SW_SHOW, $choice) Local $iMsgBoxAnswer = 1, $bLoop = True While $bLoop Switch GUIGetMsg() Case $idYess ConsoleWrite("$idYess=" & $idYess & @CRLF) Case $idNoo ConsoleWrite("$idNoo=" & $idNoo & @CRLF) Case $idExitt $iMsgBoxAnswer = 0 ; 触发退出确认流程 EndSwitch If $iMsgBoxAnswer = 1 Then ContinueLoop $iMsgBoxAnswer = MsgBox(4100, "MsgBox", "Are you sure you want to close the program?", 3) Select Case $iMsgBoxAnswer = 6 ;Yes ConsoleWrite("- bye bye" & @CRLF) $bLoop = False Case $iMsgBoxAnswer = 7 ;No $iMsgBoxAnswer = 1 ; 回到正常循环状态 EndSelect WEnd Global $num = 1 While 1 Switch $num Case "1" MsgBox(0, '', 'Number 1') ExitLoop EndSwitch Wend
内容的提问来源于stack exchange,提问作者Cress
相关产品推荐
相关产品推荐

