【已解决】求助大大帮忙看看代码错在哪里哦
本帖最后由 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
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 把变量全部申明,就好了。
或者是新界面这个窗口放到循环外去创建 回复 1# fenhanxue
首先,你要明白运行的过程是如何的:
代码在绘制界面并显示后,就进入了while --wend的死循环中以保证程序不会退出
在此过程中,会不断地接收界面消息并在switch中匹配判断并执行相应的操作,于是问题出来了:
程序刚刚运行,你并没有点击上面的$c1,此时$c2显然是一个空值(因为还没有创建),而你在界面没有操作时,得到的消息也是空值,于是就匹配了Case $c2的情况,到此,你应该已经明白了,为什么会不断地弹出那个错误的提示,同时举一反三,也应该可以明白为什么
把$c2按下后的判断条件改一改,比如:如果GUICtrlRead($input) ="1" 则提示: MsgBox(16, "错误", "您不能输入1"),则整个过程又都正常了
的原因了吧??
明白了原因,应该也知道了解决的办法了吧?? 回复 3# annybaby
哇,我明白拉~{:face (356):}
亲的解释太给力拉,学习拉~谢谢谢谢~
知道原理了操作起来就方便好多哈~ 回复 3# annybaby
解释到位,学习了! 回复 3# annybaby
这样的话,我好像只有一开始,在死循环外面,随便给$c2赋一个值好像就可以了哦 回复 6# fenhanxue
是的,也可以将里面的case $c2改成 case 4 回复 7# annybaby
恩恩呢,谢拉~ 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
页:
[1]