找回密码
 加入
搜索
查看: 5973|回复: 17

[GUI管理] 如何顺序逐步检测输入无误后才进行下一步[已解决]

  [复制链接]
发表于 2017-4-19 12:42:40 | 显示全部楼层 |阅读模式
本帖最后由 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
                ;第一步
                if  GUICtrlRead($idinput1)=0 or  GUICtrlRead($idinput1)="" Then
                        msgbox("","","input1值不能为空")
                Else
                        $str1=GUICtrlRead($idinput1)
                EndIf
                ;第二步
                if  GUICtrlRead($idinput2)=0 or  GUICtrlRead($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
                if  GUICtrlRead($idinput1)=0 or  GUICtrlRead($idinput1)=""  Then
                        msgbox("","","input1值不能为空")
                Else
                        $str1=GUICtrlRead($idinput1)
                EndIf
   Case $idinput2
                if  GUICtrlRead($idinput2)=0 or  GUICtrlRead($idinput2)=""  Then
                        msgbox("","","input2值不能为空")
                Else
                        $str2=GUICtrlRead($idinput2)
                EndIf
   Case $idBtn
                $str= $str1&"||"&$str2
        MsgBox($MB_SYSTEMMODAL, "输入值",$str)
EndSwitch
WEnd

本帖子中包含更多资源

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

×
发表于 2017-4-19 12:55:37 | 显示全部楼层
回复 1# cashiba
没有全局变量
Global $str1, $str2
发表于 2017-4-19 14:26:05 | 显示全部楼层
看看是不是这样呢?
#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
                if  GUICtrlRead($idinput1)= "" Then
                                        msgbox("","","input1值不能为空")
                ElseIf  GUICtrlRead($idinput2)= "" Then
                                        msgbox("","","input2值不能为空")
                Else
                        $str1=GUICtrlRead($idinput1) 
                        $str2=GUICtrlRead($idinput2) 
                        $str= $str1&"||"&$str2             
                MsgBox($MB_SYSTEMMODAL, "输入值",$str)
                EndIf
EndSwitch
WEnd
发表于 2017-4-19 15:27:49 | 显示全部楼层
空就直接用""表示,if判断是不是""。就知道是不是空了
 楼主| 发表于 2017-4-19 16:51:59 | 显示全部楼层
回复  cashiba
没有全局变量
Global $str1, $str2
chzj589 发表于 2017-4-19 12:55

加上变量声明也没什么改变阿.....
;第一步
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之类的。
 楼主| 发表于 2017-4-19 17:01:43 | 显示全部楼层
看看是不是这样呢?
xzf680 发表于 2017-4-19 14:26

问题不在于判断输入是不是空值或不符合要求,而是有错误了如何停止等待纠正,而不是一下就运行到脚本结束......
发表于 2017-4-19 17:15:17 | 显示全部楼层
回复 6# cashiba

你原本的範例 腳本 根本不會自己結束呀

這樣有啥問題
 楼主| 发表于 2017-4-19 17:44:18 | 显示全部楼层
回复  cashiba
你原本的範例 腳本 根本不會自己結束呀
這樣有啥問題
kk_lee69 发表于 2017-4-19 17:15

第一个例子什么都不填,点确定后界面就没了
第二个例子不点关闭按钮,界面是一直在,但是有错会返回最终的错误结果
我的目的是,有错误就不往下运行了,更不会退出界面
在错误后加sleep延时倒是可以,但是等于是限时了,不好。
发表于 2017-4-19 17:52:47 | 显示全部楼层
回复 8# cashiba

第一個例子 為何要 加入 ExitLoop

不加入  不就不會退出了嗎???

评分

参与人数 1金钱 +10 收起 理由
cashiba + 10

查看全部评分

发表于 2017-4-19 17:57:12 | 显示全部楼层
回复 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
                if  GUICtrlRead($idinput1)=0 or  GUICtrlRead($idinput1)=""  Then
                        msgbox("","","input1值不能?空")
                Else
                        $str1=GUICtrlRead($idinput1)
                EndIf
   Case $idinput2
                if  GUICtrlRead($idinput2)=0 or  GUICtrlRead($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
 楼主| 发表于 2017-4-19 18:04:42 | 显示全部楼层
回复  cashiba
kk_lee69 发表于 2017-4-19 17:57

这样写呢,还是达不到即时检错的效果,还要点确定后才报告错误。
而且
  Case $idinput1
                if  GUICtrlRead($idinput1)=0 or  GUICtrlRead($idinput1)=""  Then
                        msgbox("","","input1值不能?空")
                Else
                        $str1=GUICtrlRead($idinput1)
                EndIf
   Case $idinput2
                if  GUICtrlRead($idinput2)=0 or  GUICtrlRead($idinput2)=""  Then
                        msgbox("","","input2值不能?空")
                Else
                        $str2=GUICtrlRead($idinput2)
                EndIf
这两个分支几乎没什么用。
另外,如果有若干个输入框的话,重复的case和if判断语句会很长.....
 楼主| 发表于 2017-4-19 18:08:10 | 显示全部楼层
本帖最后由 cashiba 于 2017-4-19 18:12 编辑
回复  cashiba
第一個例子 為何要 加入 ExitLoop
不加入  不就不會退出了嗎???
kk_lee69 发表于 2017-4-19 17:52

忘了删,是加ExitLoop看看效果的....
原来第一个莫名其妙的退出是忘了删这个,感谢认真看+提醒....
发表于 2017-4-19 18:23:52 | 显示全部楼层
回复 12# cashiba
要判断输入框是不是空值,还是要判断输入框输入的数据是否正确?
不理解你的用途?

判断输入框空值:

While 1
        Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                        ExitLoop
                        ;Case $idinput1
                        ;if  GUICtrlRead($idinput1)=0 Then
                        ;msgbox("","","input1值不能为空")
                        ;Else
                        ;$str1=GUICtrlRead($idinput1)
                        ; EndIf
                        ; Case $idinput2
                        ; if  GUICtrlRead($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
发表于 2017-4-19 19:00:56 | 显示全部楼层
本帖最后由 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
                if  GUICtrlRead($idinput1)= "" Then
                                        msgbox("","","input1值不能为空")
                ElseIf  GUICtrlRead($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[4] = $idinput1 Then
                                If GUICtrlRead($idinput2) = "" Then
                                        msgbox("","","input2值不能为空")
                                EndIf
                        ElseIf $Pos[4] = $idinput2 Then
                                If GUICtrlRead($idinput1) = "" Then
                                        msgbox("","","input1值不能为空")
                                EndIf
                        EndIf
EndSwitch
WEnd

评分

参与人数 1金钱 +19 收起 理由
cashiba + 19

查看全部评分

发表于 2017-4-19 19:54:31 | 显示全部楼层
这样写呢,还是达不到即时检错的效果,还要点确定后才报告错误。
而且这两个分支几乎没什么用。
另外, ...
cashiba 发表于 2017-4-19 18:04


你有邏輯上的問題......
你說【还是达不到即时检错的效果,还要点确定后才报告错误。】

程式一開始 就是兩個輸入框  當我甚麼都不做 當然不會發生任何錯誤提示
當你在第一個輸入框輸入資料的時候 就會觸發 檢查......這是正常邏輯吧?? 這還不即時嗎??

難不成 你的意思是 不輸入 也要每隔幾廟 跳出  訊息 說 你還沒輸入嗎??

你說【而且这两个分支几乎没什么用。】

這就怪了 怎麼會沒用?? 這不就是用來檢測  第一個 或者 第二個輸入框 是否輸入正確嗎???

评分

参与人数 1金钱 +10 收起 理由
cashiba + 10

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-23 16:04 , Processed in 0.130343 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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