xkowen 发表于 2010-5-17 21:12:08

[已解决]程序中含有循环代码,GUI点击关闭按钮无效!

本帖最后由 xkowen 于 2010-5-19 11:23 编辑

点击按钮后会进入一个循环,但是主窗口无法关闭,请高人指定如何做到点击按钮后进入一事件循环,而且可以点击关闭按钮关闭程序。谢谢!
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 244, 104, 193, 125)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Button1 = GUICtrlCreateButton("开始", 80, 64, 75, 25, 0)
$Label1 = GUICtrlCreateLabel("时间:", 24, 32, 40, 17)
$Input1 = GUICtrlCreateInput("10", 64, 24, 121, 21)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Button1,"Button")
#EndRegion ### END Koda GUI section ###

While 1
        Sleep(1000)
WEnd

Func CLOSEClicked()
        Exit
EndFunc

Func Button()
        $t=GUICtrlRead($Input1)
        While 1
                Sleep(1000*$t)
                MsgBox(0,"","OK")
        WEnd
EndFunc

netegg 发表于 2010-5-17 21:50:46

global $msg= guigetmsg()
...
adlibregister('exitthis')
#EndRegion ### END Koda GUI section ###
...

func exitthis()
if $msg= -3 then exit
endfunc
试试看,不知道行不行

shqf 发表于 2010-5-17 22:05:38

Sleep(1000*$t),楼主理解这句话了吗?实在不理解,删了它再试试吧

chnlikang 发表于 2010-5-18 00:54:31

我也遇到同样过的问题,函数不运行结束其它按键就不能用。期待解答:face (20):

xkowen 发表于 2010-5-18 02:15:25

Sleep(1000*$t),楼主理解这句话了吗?实在不理解,删了它再试试吧
shqf 发表于 2010-5-17 22:05 http://www.autoitx.com/images/common/back.gif
使用sleep(1000*$t)是因为这个地方我要放一部分代码,sleep仅代表执行这段代码所需的时间,为了方便高手们指点,所以省略了。请指点,谢谢!

chnlikang 发表于 2010-5-18 08:50:10


#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 244, 104, 193, 125)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Button1 = GUICtrlCreateButton("开始", 80, 64, 75, 25, 0)
$Label1 = GUICtrlCreateLabel("时间:", 24, 32, 40, 17)
$Input1 = GUICtrlCreateInput("10", 64, 24, 121, 21)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Button1,"Button")
#EndRegion ### END Koda GUI section ###
$pause = True
While 1
        $t=GUICtrlRead($Input1)
      If $pause = False Then
                        While 1
                                Sleep(1000*$t)
                               
                                MsgBox(0,"","OK")
                                $pause=True
                        WEnd       
      EndIf
      
WEnd

Func CLOSEClicked()
      Exit
EndFunc

Func Button()
        $pause=False
EndFunc这是楼主想要的代码吗?

chnlikang 发表于 2010-5-18 08:56:36

利用“用户预定义的函数”的优先权,来关闭进入循环的代码:face (22):,这可能不是你想要的。但如果在这段代码中是可行的。

xkowen 发表于 2010-5-18 09:29:11

回复 6# chnlikang
这个解决方法不错,又学到了一招。谢谢!想问问还有没有其他实现的方法?

xkowen 发表于 2010-5-18 09:31:56

我也遇到同样过的问题,函数不运行结束其它按键就不能用。期待解答
chnlikang 发表于 2010-5-18 00:54 http://www.autoitx.com/images/common/back.gif
六楼已有解决方法,可以参考一下!

lanfengc 发表于 2010-5-18 11:55:54

6楼的代码会陷入二级while循环中不跳出来。 看这个。#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Local $Flg=False
Local $t=0
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 244, 104, 193, 125)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Button1 = GUICtrlCreateButton("开始", 80, 64, 75, 25, 0)
$Label1 = GUICtrlCreateLabel("时间:", 24, 32, 40, 17)
$Input1 = GUICtrlCreateInput("10", 64, 24, 121, 21)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Button1,"Button")
#EndRegion ### END Koda GUI section ###

While 1
        If $Flg=True Then
                Sleep(1000*$t)
                MsgBox(0,"","OK")
        Else
                Sleep(200)
        EndIf
WEnd
Func CLOSEClicked()
      Exit
EndFunc
Func Button()
      $t=GUICtrlRead($Input1)
                $Flg=True
EndFunc

waxy 发表于 2010-5-19 10:22:46

不错高手如云,我的学习之路还很漫长。

xkowen 发表于 2010-5-19 11:19:21

回复 10# lanfengc
谢谢,值得学习。
页: [1]
查看完整版本: [已解决]程序中含有循环代码,GUI点击关闭按钮无效!