#include <GUIConstants.au3>
$Form1 = GUICreate("例子一", 307, 81, -1, -1)
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Dim $i=0,$j=1
While $j
$i += 1
Sleep(800)
WEnd
Case $Button2
$j=0
MsgBox(0,"结果",$i)
EndSwitch
WEnd
;怎么才能退出这个循环 我按BOTTON2没有用
;然后我用了pooker的解决方案
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Dim $i=0,$j=1
While $j
$i += 1
sleep(800)
;我这里比pooker的解决方案多了sleep(800),因为我的原函数里,这个位置有好多操作所以用sleep代替
$nMsg = GUIGetMsg() ;捕获窗口消息
Switch $nMsg ;判断窗口信息
Case $GUI_EVENT_CLOSE ;点击退出"X"
Exit
Case $Button2 ;点击"停止"
$j=0
EndSwitch
WEnd
MsgBox(0,"结果",$i)
EndSwitch
WEnd
;同样无法解决问题,
;然后我用事件模式_____________
#include <GUIConstants.au3>
Opt('GUIOnEventMode', 1)
$Form1 = GUICreate("例子一", 307, 81, -1, -1)
GUICtrlSetOnEvent($GUI_EVENT_CLOSE,'example')
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Button1,'exam')
GUICtrlSetOnEvent($Button2,'exam2')
While 1
sleep(1000)
WEnd
Func example()
Exit
EndFunc
Func exam()
$j = Not $j
While $j
$i += 1
Sleep(800)
WEnd
MsgBox(0,"结果",$i)
EndFunc
Func exam2()
$j = 0
MsgBox(0,"结果",$i)
EndFunc
;问题依然出现。我现在的解决方案就是用hotkey
#include <GUIConstants.au3>
Opt('GUIOnEventMode', 1)
HotKeySet('{F9}','exam')
Global $j,$i
$Form1 = GUICreate("例子一", 307, 81, -1, -1)
GUICtrlSetOnEvent($GUI_EVENT_CLOSE,'example')
$Button1 = GUICtrlCreateButton("开始", 32, 24, 97, 33, 0)
$Button2 = GUICtrlCreateButton("停止", 176, 24, 97, 33, 0)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Button1,'example')
GUICtrlSetOnEvent($Button2,'example')
While 1
sleep(1000)
WEnd
Func example()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
exam()
Case $Button2
$j=0
MsgBox(0,"结果",$i)
EndSwitch
EndFunc
Func exam()
$j = Not $j
While $j
$i += 1
Sleep(800)
WEnd
MsgBox(0,"结果",$i)
EndFunc
;现在退出循环的问题解决了,又出现新的问题,
;1.hotkey是系统级的热键设定,跟其他软件造成冲突
;2.botton2还是起不到作用
主要原因就是我的这个while ...wend中间有sleep(800)本来用pooker的方案可以很好的解决,
我的原函数里面运行的程序时间大于sleep(800)
;哪位高手来解答这个困惑我好久的用gui控件退出While循环问题
[ 本帖最后由 superflq 于 2008-12-21 08:57 编辑 ] |