如何顺序逐步检测输入无误后才进行下一步[已解决]
本帖最后由 cashiba 于 2017-4-19 21:56 编辑#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
Global $str,$str1,$str2
GUICreate("GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idinput1 = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idinput2 = GUICtrlCreateInput("", 10, 35, 300, 20)
Local $idBtn = GUICtrlCreateButton("确定", 40, 75, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtn
;第一步
ifGUICtrlRead($idinput1)=0 orGUICtrlRead($idinput1)="" Then
msgbox("","","input1值不能为空")
Else
$str1=GUICtrlRead($idinput1)
EndIf
;第二步
ifGUICtrlRead($idinput2)=0 orGUICtrlRead($idinput2)=""Then
msgbox("","","input2值不能为空")
Else
$str2=GUICtrlRead($idinput2)
EndIf
;第三步
$str= $str1&"||"&$str2
MsgBox($MB_SYSTEMMODAL, "输入值",$str)
EndSwitch
WEnd
如上代码及界面。
有若干个输入框,这里以两个为例,程序运行过程中有三步操作。
问题或现象:输入框不填(或填写不符要求)的话,会出现最后的错误结果或程序错误。也就是说即使有错误也会继续下一步。
欲实现效果:如何写代码做到每一步无错误才会往下进行,或者有错误就暂停于原界面等待再次输入?
-----------------------------------------------------------------------------------------------------
下面这种写法,好像又欠缺点什么,输入框输入后无法自动触发错误检测(需要GUIRegisterMsg?)#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
Global $str,$str1,$str2
GUICreate("GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idinput1 = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idinput2 = GUICtrlCreateInput("", 10, 35, 300, 20)
Local $idBtn = GUICtrlCreateButton("确定", 40, 75, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idinput1
ifGUICtrlRead($idinput1)=0 orGUICtrlRead($idinput1)=""Then
msgbox("","","input1值不能为空")
Else
$str1=GUICtrlRead($idinput1)
EndIf
Case $idinput2
ifGUICtrlRead($idinput2)=0 orGUICtrlRead($idinput2)=""Then
msgbox("","","input2值不能为空")
Else
$str2=GUICtrlRead($idinput2)
EndIf
Case $idBtn
$str= $str1&"||"&$str2
MsgBox($MB_SYSTEMMODAL, "输入值",$str)
EndSwitch
WEnd 回复 1# cashiba
没有全局变量
Global $str1, $str2 看看是不是这样呢?#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
GUICreate("GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idinput1 = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idinput2 = GUICtrlCreateInput("", 10, 35, 300, 20)
Local $idBtn = GUICtrlCreateButton("确定", 40, 75, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtn
ifGUICtrlRead($idinput1)= "" Then
msgbox("","","input1值不能为空")
ElseIfGUICtrlRead($idinput2)= "" Then
msgbox("","","input2值不能为空")
Else
$str1=GUICtrlRead($idinput1)
$str2=GUICtrlRead($idinput2)
$str= $str1&"||"&$str2
MsgBox($MB_SYSTEMMODAL, "输入值",$str)
EndIf
EndSwitch
WEnd 空就直接用""表示,if判断是不是""。就知道是不是空了 回复cashiba
没有全局变量
Global $str1, $str2
chzj589 发表于 2017-4-19 12:55 http://www.autoitx.com/images/common/back.gif
加上变量声明也没什么改变阿.....;第一步
If GUICtrlRead($idinput1) = 0 Then
MsgBox("", "", "input1值不能为空")
Else
$str1 = GUICtrlRead($idinput1)
EndIf
;第二步
If GUICtrlRead($idinput2) = 0 Then
MsgBox("", "", "input2值不能为空")
ExitLoop
Else
$str2 = GUICtrlRead($idinput2)
EndIf
;第三步
$str = $str1 & "||" & $str2
MsgBox($MB_SYSTEMMODAL, "输入值", $str)这段怎么写才会有错误就暂停等待呢,用exitloop一下就退出脚本了,return也不能用,goto也不能用.....
while里再套若干个do....until代替goto吗?
记得有的程序语言有halt之类的。 看看是不是这样呢?
xzf680 发表于 2017-4-19 14:26 http://www.autoitx.com/images/common/back.gif
问题不在于判断输入是不是空值或不符合要求,而是有错误了如何停止等待纠正,而不是一下就运行到脚本结束...... 回复 6# cashiba
你原本的範例 腳本 根本不會自己結束呀
這樣有啥問題 回复cashiba
你原本的範例 腳本 根本不會自己結束呀
這樣有啥問題
kk_lee69 发表于 2017-4-19 17:15 http://www.autoitx.com/images/common/back.gif
第一个例子什么都不填,点确定后界面就没了
第二个例子不点关闭按钮,界面是一直在,但是有错会返回最终的错误结果
我的目的是,有错误就不往下运行了,更不会退出界面
在错误后加sleep延时倒是可以,但是等于是限时了,不好。 回复 8# cashiba
第一個例子 為何要 加入 ExitLoop
不加入不就不會退出了嗎??? 回复 1# cashiba
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
Global $str,$str1,$str2
GUICreate("GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idinput1 = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idinput2 = GUICtrlCreateInput("", 10, 35, 300, 20)
Local $idBtn = GUICtrlCreateButton("确定", 40, 75, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idinput1
ifGUICtrlRead($idinput1)=0 orGUICtrlRead($idinput1)=""Then
msgbox("","","input1值不能?空")
Else
$str1=GUICtrlRead($idinput1)
EndIf
Case $idinput2
ifGUICtrlRead($idinput2)=0 orGUICtrlRead($idinput2)=""Then
msgbox("","","input2值不能?空")
Else
$str2=GUICtrlRead($idinput2)
EndIf
Case $idBtn
IF $str1="" or $str2="" Then
MsgBox($MB_SYSTEMMODAL, "有錯誤喔 請重新輸入","有錯誤喔 請重新輸入")
Else
$str= $str1&"||"&$str2
MsgBox($MB_SYSTEMMODAL, "?入值",$str)
EndIf
EndSwitch
WEnd 回复cashiba
kk_lee69 发表于 2017-4-19 17:57 http://www.autoitx.com/images/common/back.gif
这样写呢,还是达不到即时检错的效果,还要点确定后才报告错误。
而且Case $idinput1
ifGUICtrlRead($idinput1)=0 orGUICtrlRead($idinput1)=""Then
msgbox("","","input1值不能?空")
Else
$str1=GUICtrlRead($idinput1)
EndIf
Case $idinput2
ifGUICtrlRead($idinput2)=0 orGUICtrlRead($idinput2)=""Then
msgbox("","","input2值不能?空")
Else
$str2=GUICtrlRead($idinput2)
EndIf这两个分支几乎没什么用。
另外,如果有若干个输入框的话,重复的case和if判断语句会很长..... 本帖最后由 cashiba 于 2017-4-19 18:12 编辑
回复cashiba
第一個例子 為何要 加入 ExitLoop
不加入不就不會退出了嗎???
kk_lee69 发表于 2017-4-19 17:52 http://www.autoitx.com/images/common/back.gif
忘了删,是加ExitLoop看看效果的....
原来第一个莫名其妙的退出是忘了删这个,感谢认真看+提醒....
{:face (361):} 回复 12# cashiba
要判断输入框是不是空值,还是要判断输入框输入的数据是否正确?
不理解你的用途?
判断输入框空值:
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
;Case $idinput1
;ifGUICtrlRead($idinput1)=0 Then
;msgbox("","","input1值不能为空")
;Else
;$str1=GUICtrlRead($idinput1)
; EndIf
; Case $idinput2
; ifGUICtrlRead($idinput2)=0 Then
;msgbox("","","input2值不能为空")
;Else
;$str2=GUICtrlRead($idinput2)
; EndIf
Case $idBtn
If GUICtrlRead($idinput1) <> '' And GUICtrlRead($idinput2) <> '' Then
$str1 = GUICtrlRead($idinput1)
$str2 = GUICtrlRead($idinput2)
$str = $str1 & "||" & $str2
MsgBox($MB_SYSTEMMODAL, "输入值", $str)
Else
MsgBox("", "", '请检查输入是否完整')
EndIf
EndSwitch
WEnd
本帖最后由 xzf680 于 2017-4-19 19:02 编辑
还是没明白你的想法,试试这个:#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
$Main = GUICreate("GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idinput1 = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idinput2 = GUICtrlCreateInput("", 10, 35, 300, 20)
Local $idBtn = GUICtrlCreateButton("确定", 40, 75, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtn
ifGUICtrlRead($idinput1)= "" Then
msgbox("","","input1值不能为空")
ElseIfGUICtrlRead($idinput2)= "" Then
msgbox("","","input2值不能为空")
Else
$str1=GUICtrlRead($idinput1)
$str2=GUICtrlRead($idinput2)
$str= $str1&"||"&$str2
MsgBox($MB_SYSTEMMODAL, "输入值",$str)
EndIf
Case $GUI_EVENT_PRIMARYDOWN
$Pos = GUIGetCursorInfo($Main)
If $Pos = $idinput1 Then
If GUICtrlRead($idinput2) = "" Then
msgbox("","","input2值不能为空")
EndIf
ElseIf $Pos = $idinput2 Then
If GUICtrlRead($idinput1) = "" Then
msgbox("","","input1值不能为空")
EndIf
EndIf
EndSwitch
WEnd 这样写呢,还是达不到即时检错的效果,还要点确定后才报告错误。
而且这两个分支几乎没什么用。
另外, ...
cashiba 发表于 2017-4-19 18:04 http://www.autoitx.com/images/common/back.gif
你有邏輯上的問題......
你說【还是达不到即时检错的效果,还要点确定后才报告错误。】
程式一開始 就是兩個輸入框當我甚麼都不做 當然不會發生任何錯誤提示
當你在第一個輸入框輸入資料的時候 就會觸發 檢查......這是正常邏輯吧?? 這還不即時嗎??
難不成 你的意思是 不輸入 也要每隔幾廟 跳出訊息 說 你還沒輸入嗎??
你說【而且这两个分支几乎没什么用。】
這就怪了 怎麼會沒用?? 這不就是用來檢測第一個 或者 第二個輸入框 是否輸入正確嗎???
页:
[1]
2