找回密码
 加入
搜索
查看: 3848|回复: 2

[GUI管理] 【已解决】事件模式遇到的奇怪现象, 求解

[复制链接]
发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-6-24 22:23:24 | 显示全部楼层
貌似按钮被GUICtrlSetBkColor()后,不仅样式发生了改变,还会响应回车,所以确实是再次调用了start函数

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
user3000 + 20 + 2 +++又让我受教育了!

查看全部评分

发表于 2013-6-24 23:07:23 | 显示全部楼层
貌似按钮被GUICtrlSetBkColor()后,不仅样式发生了改变,还会响应回车,所以确实是再次调用了start函数
afan 发表于 2013-6-24 22:23


果然是如此, 去掉设置背景色就正常了! 这应该算是一个BUG吧?
话说回来,楼主的代码太繁琐了,要实现这样输入功能其实只需要建立一个INPUT, 修改合适样式即可.
当然lable的文本也要对应的设置一下.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-2 22:50 , Processed in 0.078457 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表