找回密码
 加入
搜索
查看: 4335|回复: 15

关于判断控件状态的问题。

[复制链接]
发表于 2008-10-12 11:23:17 | 显示全部楼层 |阅读模式
Const $N = 22
Dim $Checkbox[$N]
……………………………………代码
$Checkbox[1] = GUICtrlCreateCheckbox("test", 8, 128, 175, 17)
……………………………………
$Checkbox[20] = GUICtrlCreateCheckbox("test", 8, 160, 175, 17)
……………………………………代码
Func Button3()
        For $i = 1 To $N - 1
        If GUICtrlRead($Checkbox[$i],0) = $GUI_UNCHECKED Then
        MsgBox(0,"提示"," 至少选择一个。五秒后将退出本程序",5)
        ExitLoop
        Else
        MsgBox(0,"提示","  开始运行程序。五秒后将关闭本窗口",5)
        ExitLoop
        EndIf
Next
当按下Buttion3时,先检查有没有至少一个$Checkbox被选中,如果一个都没有选中就提示第一个MsgBox。现在的问题是不管选没选就提示“开始运行程序”(第二个MsgBox)。请问怎么解决?

[ 本帖最后由 xg911335 于 2008-10-15 19:15 编辑 ]
 楼主| 发表于 2008-10-12 15:13:20 | 显示全部楼层
去了就是一个一个的判断了。。我不想这样。
发表于 2008-10-12 17:30:56 | 显示全部楼层
Const $N = 22
Dim $Checkbox[$N]
……………………………………代码
$Checkbox[1] = GUICtrlCreateCheckbox("test", 8, 128, 175, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("test", 8, 160, 175, 17)
……………………………………代码
Func Button3()
        For $i = 0 To $N - 1
        If GUICtrlRead($Checkbox[$i],0) = $GUI_UNCHECKED Then


在这段代码里,看不到有:$Checkbox[0]的....
 楼主| 发表于 2008-10-12 18:43:29 | 显示全部楼层
不好意思。打错了。麻烦楼上的仁兄帮我解决以下这个问题。
 楼主| 发表于 2008-10-13 12:08:12 | 显示全部楼层
就差最后一步了。D上去。
发表于 2008-10-13 13:58:09 | 显示全部楼层
If GUICtrlRead($Checkbox[$i],0) = $GUI_UNCHECKED Then
        MsgBox(0,"提示"," 至少选择一个。五秒后将退出本程序",5)
        ExitLoop
        Else
        MsgBox(0,"提示","  开始运行程序。五秒后将关闭本窗口",5)
        ExitLoop
        EndIf

要明白条件判断的逻辑性,你去看清楚帮助就知道的了!

[ 本帖最后由 liongodmien 于 2008-10-13 13:59 编辑 ]
发表于 2008-10-13 14:25:23 | 显示全部楼层
仿做了一个:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Const $N = 22
Dim $Checkbox[$N]
Opt('trayautopause', 0)
Opt('guioneventmode', 1)
$form = GUICreate('test')
$Checkbox[1] = GUICtrlCreateCheckbox("test", 8, 128, 175, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("test", 8, 160, 175, 17)
$Checkbox2 = GUICtrlCreateCheckbox("EXIT", 200, 360, 75, 17)
$button3 = GUICtrlCreateButton('test', 8, 210, 50,20)
GUICtrlSetOnEvent($button3, 'Button3')
GUISetState(@SW_SHOW)

Func Button3()
        For $i = 1 To $N - 1
        If GUICtrlRead($Checkbox[$i],0) = $GUI_UNCHECKED Then
        MsgBox(0,"提示"," 至少选择一个。五秒后将退出本程序",5)
        ExitLoop
        Else
        MsgBox(0,"提示","  开始运行程序。五秒后将关闭本窗口",5)
        ExitLoop
        EndIf
        Next
        EndFunc

Do
        If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then Exit
        Sleep(100)
Until  0
 楼主| 发表于 2008-10-13 18:21:12 | 显示全部楼层
楼上的仁兄。我初学,不是太了解。如何一次判断长达20个的$Checkbox[20]是否被选中。我发出来的代码只能判断第一个$Checkbox[1]就提示了。另外我对Do.....Until很不了解。能不能给我一段解决这个问题的代码。我自己在研究一下代码,以后遇到这样的问题我就知道怎么做了。先谢了。
 楼主| 发表于 2008-10-14 10:12:49 | 显示全部楼层
D上去。最后一步。
发表于 2008-10-14 11:05:37 | 显示全部楼层
只能一个一个去判断,把结果记录在一个数组里,如:$var[$i] ,把选中的数量记录在$var[0] 中,再检测$var[0]如果其值为你设定的某个标志值,就执行相应的操作!
发表于 2008-10-14 11:16:08 | 显示全部楼层

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Const $N = 22
Dim $Checkbox[$N], $var[$N - 1], $v = 0
Opt('trayautopause', 0)
Opt('guioneventmode', 1)
$form = GUICreate('test')
$Checkbox[1] = GUICtrlCreateCheckbox("test", 8, 128, 175, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("test", 8, 160, 175, 17)
$Checkbox2 = GUICtrlCreateCheckbox("EXIT", 200, 360, 75, 17)
$button3 = GUICtrlCreateButton('test', 8, 210, 50,20)
GUICtrlSetOnEvent($button3, 'Button3')
GUISetState(@SW_SHOW)

Func Button3()
        $var[0] = 0
        For $i = 1 To $N - 1
                If GUICtrlRead($Checkbox[$i],0) = $GUI_CHECKED Then
                        $v = $v + 1
                        $var[$v] = $i
                        var[0] = var[0] + 1
                EndIf
        Next
        If $var[0] = 0 Then
                MsgBox(0,"提示"," 至少选择一个。五秒后将退出本程序",5)
                Return 0
        Else
                MsgBox(0,"提示","  开始运行程序。五秒后将关闭本窗口",5)
                Return 1
        EndIf
EndFunc

Do
        If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then Exit
        Sleep(100)
Until  0


原来没写好,今天修正一下错误的地方。

[ 本帖最后由 liongodmien 于 2008-10-15 10:53 编辑 ]
发表于 2008-10-14 11:22:13 | 显示全部楼层
循环:
While ‘表达式’
.
.
.
Wend
是当表达式中条件不相同时跳出循环(逻辑值0)


Do
.
.
.
Until ‘表达式’
是当表达式中条件相同时跳出循环(逻辑值1)
 楼主| 发表于 2008-10-14 21:02:11 | 显示全部楼层
我篇帖子让我学到了数组,非常感谢“liongodmien”兄弟。我按你的方法运行了一下。运行后,没有选择任何checkbox,点确定提示:“至少选择一个”,当我随便点一个checkbox,还是提示:“至少选择一个”。不过我把 If $var[0] = 0 Then改为 If $var[$v] <> 0 Then这样到是可以了。不过又出现一个小问题。程序运行后,我随便点一个checkbox,在把它取消选中。程序上也就是一个都没有选中。在点确定却提示:“开始运行程序。”应该是数组里面有纪录了。怎么把数组置空?

[ 本帖最后由 xg911335 于 2008-10-14 21:07 编辑 ]
发表于 2008-10-14 21:59:13 | 显示全部楼层
是否是这样。

Func Button3()
        Local $zt = 1
        For $i = 0 To $N-1
                If GUICtrlRead($Checkbox[$i],0) <> $GUI_UNCHECKED Then
                        $zt = 2
                        ExitLoop
                EndIf
        Next

        Select
                Case $zt = 1
                        MsgBox(0, "提示", " 至少选择一个。五秒后将退出本程序", 5)
                Case $zt = 2
                        MsgBox(0, "提示", "  开始运行程序。五秒后将关闭本窗口", 5)
        EndSelect
EndFunc   ;==>Button3
发表于 2008-10-15 10:51:23 | 显示全部楼层
原帖由 xg911335 于 2008-10-14 21:02 发表
我篇帖子让我学到了数组,非常感谢“liongodmien”兄弟。我按你的方法运行了一下。运行后,没有选择任何checkbox,点确定提示:“至少选择一个”,当我随便点一个checkbox,还是提示:“至少选择一个”。不过我把 If ...

不好意思,那天没看清就发出去了,其中一行有错误了,修正:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Const $N = 22
Dim $Checkbox[$N], $var[$N - 1], $v = 0
Opt('trayautopause', 0)
Opt('guioneventmode', 1)
$form = GUICreate('test')
$Checkbox[1] = GUICtrlCreateCheckbox("test", 8, 128, 175, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("test", 8, 160, 175, 17)
$Checkbox2 = GUICtrlCreateCheckbox("EXIT", 200, 360, 75, 17)
$button3 = GUICtrlCreateButton('test', 8, 210, 50,20)
GUICtrlSetOnEvent($button3, 'Button3')
GUISetState(@SW_SHOW)

Func Button3()
        $var[0] = 0
        For $i = 1 To $N - 1
                If GUICtrlRead($Checkbox[$i],0) = $GUI_CHECKED Then
                        $v = $v + 1
                        $var[$v] = $i
                        $var[0] = $var[0] + 1
                EndIf
        Next
        If $var[0] = 0 Then
                MsgBox(0,"提示"," 至少选择一个。五秒后将退出本程序",5)
                Return 0
        Else
                MsgBox(0,"提示","  开始运行程序。五秒后将关闭本窗口",5)
                Return 1
        EndIf
EndFunc

Do
        If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then Exit
        Sleep(100)
Until  0
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-12 14:53 , Processed in 0.076312 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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