chiron_shen 发表于 2013-6-24 17:04:50

【已解决】事件模式遇到的奇怪现象, 求解

本帖最后由 chiron_shen 于 2013-7-5 10:57 编辑

如下程序, 使用了事件模式
希望的运行结果:
1. 点 start 按钮
2.在出来的input name 输入框中输入字符
3.隐藏 input name 输入框 , 显示 input Number 输入框

可实际运行的结果是 input name 输入后 马上又回到 input name ,而没有出现预期的input Number 输入框 ,好像是再次调用了start函数

经过分析, 2个方法可以避免错误的结果,
1.将 $start 变量 下面的 GUICtrlSetBkColor(-1,0x00ff00) 屏蔽
2. 将$xing_ming_tilte 和 $xing_ming_input 放到 $input_number_title 和 $input_number前面 也就是 GUICtrlSetFont(-1,24) 下面

求大侠指点 问题出在哪里?#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         myName

Script Function:
        Template AutoIt script.

#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#Include <GuiButton.au3>


Global $start,$input_number_title,$input_number,$xing_ming_tilte,$xing_ming_input

Opt("GUIOnEventMode", 1)


$main=GUICreate("GUESS",750,600)

$start=GUICtrlCreateButton("START",280,280,200,100)
GUICtrlSetBkColor(-1,0x00ff00)
GUICtrlSetFont(-1,24)

$input_number_title=GUICtrlCreateLabel("INPUT Number",100,80)
$input_number=GUICtrlCreateInput("",100,100,200,30)

$xing_ming_tilte=GUICtrlCreateLabel("INPUT NAME",100,80)
$xing_ming_input=GUICtrlCreateInput("",100,100,200,30)

GUISetState()

GUICTRLSetState($xing_ming_tilte,$GUI_HIDE)
GUICTRLSetState($xing_ming_input,$GUI_HIDE)
GUICTRLSetState($input_number_title,$GUI_HIDE)
GUICTRLSetState($input_number,$GUI_HIDE)

GUISetOnEvent($GUI_EVENT_CLOSE,'CLOSE')
GUIctrlSetOnEvent($start,'START')
GUIctrlSetOnEvent($xing_ming_input,'CHECK_NAME')

while 1
        sleep(100)
WEnd

Func close()
        Exit
EndFunc

Func START()
        GUICTRLSetState($start,$GUI_NOFOCUS)       
        GUICTRLSetState($start,$GUI_HIDE)
        GUICTRLSetState($xing_ming_tilte,$GUI_SHOW)
        GUICTRLSetState($xing_ming_input,$GUI_SHOW)
        GUICTRLSetState($xing_ming_input,$GUI_FOCUS)       
        GUICtrlSetData($xing_ming_input,"")
EndFunc

Func CHECK_NAME()
                $xing_ming=GUICtrlRead($xing_ming_input)
                WinSetTitle("GUESS","","GUESS---"&$xing_ming)
                GUICTRLSetState($xing_ming_tilte,$GUI_HIDE)
                GUICTRLSetState($xing_ming_input,$GUI_HIDE)
                GUICTRLSetState($input_number_title,$GUI_SHOW)
                GUICTRLSetState($input_number,$GUI_SHOW)
                GUICTRLSetState($input_number,$GUI_FOCUS)       
                GUICtrlSetData($input_number,"")
EndFunc

afan 发表于 2013-6-24 22:23:24

貌似按钮被GUICtrlSetBkColor()后,不仅样式发生了改变,还会响应回车,所以确实是再次调用了start函数

user3000 发表于 2013-6-24 23:07:23

貌似按钮被GUICtrlSetBkColor()后,不仅样式发生了改变,还会响应回车,所以确实是再次调用了start函数
afan 发表于 2013-6-24 22:23 http://www.autoitx.com/images/common/back.gif

果然是如此, 去掉设置背景色就正常了! 这应该算是一个BUG吧?
话说回来,楼主的代码太繁琐了,要实现这样输入功能其实只需要建立一个INPUT, 修改合适样式即可.
当然lable的文本也要对应的设置一下.
页: [1]
查看完整版本: 【已解决】事件模式遇到的奇怪现象, 求解