找回密码
 加入
搜索
查看: 4530|回复: 8

[GUI管理] 【已解决】求助大大帮忙看看代码错在哪里哦

  [复制链接]
发表于 2012-10-26 11:45:18 | 显示全部楼层 |阅读模式
本帖最后由 fenhanxue 于 2012-10-27 10:52 编辑

我想实现的是:
1、打开程序,建一个GUI,并包含一个button控件(我把他命名为$c1)
2、按下$c1,创建新的GUI,并包含一个 input($input)控件   和   button控件($c2)
3、按下$c2,可以对 input进行判断,如果GUICtrlRead($input) =""     则提示  :   MsgBox(16, "错误", "您尚未输入Input")

也就是如下图所示:




但是我写了这段代码,发现程序一运行,就自动跳出了   MsgBox(16, "错误", "您尚未输入Input" ),不知道问题出在哪里?
另外,如果我把$c2按下后的判断条件改一改,比如:如果GUICtrlRead($input) ="1"     则提示  :   MsgBox(16, "错误", "您不能输入1"),则整个过程又都正常了,不知道究竟什么原因哦?


我的代码如下:
Dim $input,$c2
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
GUICreate("主界面",300,400)
$c1=GUICtrlCreateButton("创建含有input的新界面",5,100,200,100)
GUISetState()
While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg[0]
                        Case $GUI_EVENT_CLOSE
                                        Exit
                        Case $c1
                                        $tb=GUICreate("新界面",500,700)
                                        $c2=GUICtrlCreateButton("判断",5,110,50,50)
                                        $inputlei=GUICtrlCreateInput("",10,45,330,30)
                                        GUISetState()
                        Case $c2
                                         If GUICtrlRead($input) ="" Then
                         MsgBox(16, "错误", "您尚未输入Input")
                                     EndIf
            EndSwitch
WEnd

本帖子中包含更多资源

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

×
发表于 2012-10-26 12:09:39 | 显示全部楼层
把变量全部申明,就好了。
或者是新界面这个窗口放到循环外去创建
发表于 2012-10-26 14:11:52 | 显示全部楼层
回复 1# fenhanxue

首先,你要明白运行的过程是如何的:
代码在绘制界面并显示后,就进入了while --wend的死循环中以保证程序不会退出
在此过程中,会不断地接收界面消息并在switch中匹配判断并执行相应的操作,于是问题出来了:
程序刚刚运行,你并没有点击上面的$c1,此时$c2显然是一个空值(因为还没有创建),而你在界面没有操作时,得到的消息也是空值,于是就匹配了Case $c2的情况,到此,你应该已经明白了,为什么会不断地弹出那个错误的提示,同时举一反三,也应该可以明白为什么

把$c2按下后的判断条件改一改,比如:如果GUICtrlRead($input) ="1"     则提示  :   MsgBox(16, "错误", "您不能输入1"),则整个过程又都正常了
的原因了吧??

明白了原因,应该也知道了解决的办法了吧??
 楼主| 发表于 2012-10-26 15:20:25 | 显示全部楼层
回复 3# annybaby


    哇,我明白拉~

  亲的解释太给力拉,学习拉~谢谢谢谢~

  知道原理了操作起来就方便好多哈~
发表于 2012-10-26 15:28:21 | 显示全部楼层
回复 3# annybaby


    解释到位,学习了!
 楼主| 发表于 2012-10-26 15:34:20 | 显示全部楼层
回复 3# annybaby

这样的话,我好像只有一开始,在死循环外面,随便给$c2赋一个值好像就可以了哦
发表于 2012-10-26 16:02:08 | 显示全部楼层
回复 6# fenhanxue

是的,也可以将里面的case $c2改成 case 4
 楼主| 发表于 2012-10-26 16:04:37 | 显示全部楼层
回复 7# annybaby


    恩恩呢,谢拉~
发表于 2012-10-26 16:46:18 | 显示全部楼层
3#分析的不错,代码贴下。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

Dim $input, $c2 = 1, $tb, $inputlei
GUICreate("主界面", 300, 400)
$c1 = GUICtrlCreateButton("创建含有input的新界面", 5, 100, 200, 100)
GUISetState()
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $c1
                        $tb = GUICreate("新界面", 500, 700)
                        $c2 = GUICtrlCreateButton("判断", 5, 110, 50, 50)
                        $inputlei = GUICtrlCreateInput("", 10, 45, 330, 30)
                        GUISetState()
                Case $c2
                        If Not GUICtrlRead($inputlei) Then
                                MsgBox(16, "错误", "您尚未输入Input")
                        Else
                                MsgBox(0, "", GUICtrlRead($inputlei))
                        EndIf
        EndSwitch
WEnd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-11 18:26 , Processed in 0.091569 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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