dhh45 发表于 2010-9-25 17:09:53

GUI界面中点击确定按钮后循环产生,如何中断该循环【已解决】

本帖最后由 dhh45 于 2010-9-26 14:59 编辑

while 1
   if$msg=$btthen
       while 1
             ..........
       wend
   endif
wend

省略号内容主要是从GUI界面中获得取值,做一定处理
现在需要中断循环,需要从界面获得新的取值,点击确定后,再产生循环

dhh45 发表于 2010-9-25 20:41:55

自己顶一个

afan 发表于 2010-9-25 21:04:44

现在需要中断循环,需要从界面获得新的取值,点击确定后,再产生循环
dhh45 发表于 2010-9-25 17:09 http://www.autoitx.com/images/common/back.gif

“中断循环”的条件是什么?
“点击确定后,再产生循环”何处点击确定?

如果LZ贴出完整的可测试代码,并详细注明问题,也不至于让这个简单的问题摆3小时而无人回复…
靠猜是很费精力的。

xcycom 发表于 2010-9-26 00:07:57

嗯 嗯 。死循环

dhh45 发表于 2010-9-26 10:10:36

回复 3# afan

真的不好意思啊,不是我不贴代码,主要是公司内网的代码弄不出来,除非自己在打一遍代码

下面我会把我的意图写清楚的,谢谢你了啊

dhh45 发表于 2010-9-26 10:30:01

$input1=GUICtrlCreateInput("input1",20,20,30,40)
$input2=GUICtrlCreateInput("input2",50,50,30,40)
$input3=GUICtrlCreateInput("input3",80,80,30,40)
$bt1=GUICtrlCreateButton("确定",130,130,30,40)
$bt2=GUICtrlCreateButton("终止",150,150,30,40)
;界面中有以上控件
While1
$msg=GUIGetMsg
if $msg=$bt1 Then
        While 1
                $aa=WinActivate("TEST");等待TEST窗口出现
                ifNot $aa=0Then;TEST窗口出现
                        ;将$input1,$input,$input3的值输入到TEST窗口
                EndIf
        WEnd
ElseIf       
if $msg=$bt2Then
        ;终止$bt1 的循环
EndIf
WEnd代码不完全,主要写出思路
可能我的思路不准确,请大家帮忙,只能想到这里了

netegg 发表于 2010-9-26 10:59:55

如果是在操作过程中监控按钮动作,建议使用windows消息

dhh45 发表于 2010-9-26 11:19:11

回复 7# netegg
操作过程中是什么意思,点击“确定”按钮后,循环一直进行。
循环进行时,不一定有操作行为。实际情况应该是在操作行为结束后,终止循环,重新输入数据,再确定开始新的循环

afan 发表于 2010-9-26 11:27:04

方式1,$bt1 事件里不使用循环,直接 WinWait("TEST"),终止Wait可用热键。
方式2,使用循环,并GUIGetMsg(),可响应终止。
方式3,注册 Adlib 函数。

下面代码以方式3为例:GUICreate('窗口', 250, 200)
$input1 = GUICtrlCreateInput('input1', 20, 20, 200, 20)
$input2 = GUICtrlCreateInput('input2', 20, 50, 200, 20)
$input3 = GUICtrlCreateInput('input3', 20, 80, 200, 20)
$bt1 = GUICtrlCreateButton('执行', 30, 130, 80, 25)
$bt2 = GUICtrlCreateButton('终止', 130, 130, 80, 25)
GUISetState()

While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        Exit
                Case $bt1
                        AdlibRegister('_Found')
                        GUICtrlSetState($bt1, 128)
                Case $bt2
                        AdlibUnRegister()
                        GUICtrlSetState($bt1, 64)
        EndSwitch
WEnd

Func _Found()
        If Not WinExists('test') Then Return
        WinActivate('test')
        ;输入数据
        AdlibUnRegister()
        GUICtrlSetState($bt1, 64)
EndFunc   ;==>_Found

dhh45 发表于 2010-9-26 11:28:25

其实这个是日常工作的辅助工具,当TEST窗口出现自动向TEST窗口输入GUI界面中的三个值,随着工作的进行,GUI界面中的三个值不符合要求需要修改,确定后,当TEST窗口出现自动向TEST窗口输入GUI界面中的新的三个值

就这样的工具

可能我的思路不对啊,请大家帮忙,可能还有其他思路

dhh45 发表于 2010-9-26 11:31:42

回复 9# afan
先谢谢了,后面仔细研究代码

还想说的方式2,如何响应终止
方式1,呵呵,研究中……

sanmoking 发表于 2010-9-26 12:10:30

本帖最后由 sanmoking 于 2010-9-26 12:22 编辑

我一般都是这样用的#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 242, 135, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Button1 = GUICtrlCreateButton("点击后开始", 48, 40, 137, 33)
GUICtrlSetOnEvent(-1, "ch")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$ok = 0;开关的初始状态
$num = 0
While 1
Sleep(20)
ch1();实际运行的代码要放到主循环里,相当于布置好线路,只等开关联通
WEnd
Func ch();点击按钮运行的这个函数,相当于电灯的开关
If $ok = 0 Then
$ok = 1
   GUICtrlSetData($Button1, "点击后暂停")
Else
$ok = 0
GUICtrlSetData($Button1, "点击后开始")
EndIf
EndFunc
Func ch1();这个函数才是实际进行的代码
If $ok = 1 Then ;一定要有这个的开关
ToolTip($num);这里放你自己的代码
$num += 1
EndIf
EndFunc

Func Form1Close()
Exit
EndFunc

dhh45 发表于 2010-9-26 14:59:06

回复 12# sanmoking


用你的代码解决问题了,谢谢

.個朲綉√ 发表于 2011-9-18 21:34:05

回复 12# sanmoking


    太牛了,又学会了一招,我做了个程序,工作起为,关都关不掉,这下好了,可以解决这个问题了。

jabilyang 发表于 2013-7-25 21:38:14

我现在在做一个老化测试的小程序,刚好可以用到这个,顶顶
页: [1]
查看完整版本: GUI界面中点击确定按钮后循环产生,如何中断该循环【已解决】