找回密码
 加入
搜索
查看: 8115|回复: 12

[AU3基础] GUICtrlCreateCheckbox复选框的判断[已解决]

 火.. [复制链接]
发表于 2010-12-14 15:26:53 | 显示全部楼层 |阅读模式
本帖最后由 yikang8888 于 2010-12-15 12:39 编辑

如下代码,每个复选框对应一个功能,当按下start时,我需要判断哪几个复选框被选中,并且执行相应的功能,不选的不执行,请高手指点,感谢
GUICreate("Form1", 600, 450)
$Checkbox1 = GUICtrlCreateCheckbox("复选框 - 1", 40, 30, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("复选框 - 2", 160, 30, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("复选框 - 3", 280, 30, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("复选框 - 4", 400, 30, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("复选框 - 5", 40, 80, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("复选框 - 6", 160, 80, 97, 17)
$Checkbox7 = GUICtrlCreateCheckbox("复选框 - 7", 280, 80, 97, 17)
$Checkbox8 = GUICtrlCreateCheckbox("复选框 - 8", 400, 80, 97, 17)
$Checkbox9 = GUICtrlCreateCheckbox("复选框 - 9", 40, 130, 97, 17)
$Checkbox10 = GUICtrlCreateCheckbox("复选框 - 10", 160, 130, 97, 17)
$Checkbox11 = GUICtrlCreateCheckbox("复选框 - 11", 280, 130, 97, 17)
$Checkbox12 = GUICtrlCreateCheckbox("复选框 - 12", 400, 130, 97, 17)

$b = GUICtrlCreateButton('Start', 130, 200, 150, 25)
GUISetState()
$sl = 0
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Checkbox1 To $Checkbox12
                        If GUICtrlRead($nMsg) = 1 Then $sl += 1
                        If GUICtrlRead($nMsg) = 4 Then $sl -= 1
                Case $b
                        MsgBox(0, 0, $sl)
        EndSwitch
WEnd

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-12-14 15:42:09 | 显示全部楼层
单就此段代码来说,没必要判断Case $Checkbox1 To $Checkbox12,用Case $b截取按钮的点击就行了。在Case $b中循环检测所有的CheckBox是否被选中,如果选中则执行某个功能。在时间复杂度上,此题至少需要O(n)时间内完成,绝对不属于高效率,在想有没有高效一点的算法。
 楼主| 发表于 2010-12-14 15:54:32 | 显示全部楼层
谢谢,还请帮忙想想高效率并且简单的算法,感谢前辈!
发表于 2010-12-14 16:33:29 | 显示全部楼层
高效率的话可以用 事件模式 啊,为每个$Checkbox写FUNC,一点一个准
 楼主| 发表于 2010-12-14 16:41:45 | 显示全部楼层
我是想先选择好需要的功能,然后再点击一个按钮,一起执行选的东西呀
发表于 2010-12-14 17:59:40 | 显示全部楼层
本帖最后由 afan 于 2010-12-14 18:04 编辑
GUICreate("Form1", 600, 450)
$Checkbox1 = GUICtrlCreateCheckbox("复选框 - 1", 40, 30, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("复选框 - 2", 160, 30, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("复选框 - 3", 280, 30, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("复选框 - 4", 400, 30, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("复选框 - 5", 40, 80, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("复选框 - 6", 160, 80, 97, 17)
$Checkbox7 = GUICtrlCreateCheckbox("复选框 - 7", 280, 80, 97, 17)
$Checkbox8 = GUICtrlCreateCheckbox("复选框 - 8", 400, 80, 97, 17)
$Checkbox9 = GUICtrlCreateCheckbox("复选框 - 9", 40, 130, 97, 17)
$Checkbox10 = GUICtrlCreateCheckbox("复选框 - 10", 160, 130, 97, 17)
$Checkbox11 = GUICtrlCreateCheckbox("复选框 - 11", 280, 130, 97, 17)
$Checkbox12 = GUICtrlCreateCheckbox("复选框 - 12", 400, 130, 97, 17)

$b = GUICtrlCreateButton('Start', 130, 200, 150, 25)
GUISetState()
$ck = 0
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $b
                        For $i = 1 To 12
                                If GUICtrlRead(Eval('Checkbox' & $i)) = 1 Then
                                        $ck = $i
                                        Call('_Go')
                                EndIf
                        Next
        EndSwitch
WEnd

Func _Go()
        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
EndFunc   ;==>_Go
实际应用:
GUICreate("Form1", 600, 450)
$Checkbox1 = GUICtrlCreateCheckbox("复选框 - 1", 40, 30, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("复选框 - 2", 160, 30, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("复选框 - 3", 280, 30, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("复选框 - 4", 400, 30, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("复选框 - 5", 40, 80, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("复选框 - 6", 160, 80, 97, 17)
$Checkbox7 = GUICtrlCreateCheckbox("复选框 - 7", 280, 80, 97, 17)
$Checkbox8 = GUICtrlCreateCheckbox("复选框 - 8", 400, 80, 97, 17)
$Checkbox9 = GUICtrlCreateCheckbox("复选框 - 9", 40, 130, 97, 17)
$Checkbox10 = GUICtrlCreateCheckbox("复选框 - 10", 160, 130, 97, 17)
$Checkbox11 = GUICtrlCreateCheckbox("复选框 - 11", 280, 130, 97, 17)
$Checkbox12 = GUICtrlCreateCheckbox("复选框 - 12", 400, 130, 97, 17)

$b = GUICtrlCreateButton('Start', 130, 200, 150, 25)
GUISetState()
$ck = 0
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $b
                        For $i = 1 To 12
                                If GUICtrlRead(Eval('Checkbox' & $i)) = 1 Then
                                        $ck = $i
                                        Call('_Go')
                                EndIf
                        Next
        EndSwitch
WEnd

Func _Go()
        Switch $ck
                Case 1
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 2
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 3
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 4
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 5
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 6
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 7
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 8
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 9
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 10
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 11
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
                Case 12
                        MsgBox(0, '', '执行复选框 ' & $ck & ' 的任务')
        EndSwitch
EndFunc   ;==>_Go

评分

参与人数 2金钱 +20 收起 理由
heroxianf + 10 到处看到好东西。
xyold1 + 10 Eval帅呆了

查看全部评分

 楼主| 发表于 2010-12-15 08:35:29 | 显示全部楼层
OK了,非常感谢.
发表于 2011-2-28 21:26:54 | 显示全部楼层
实际应用:
afan 发表于 2010-12-14 17:59



    这个能不能这样

这个如果一起选中的话 就会一起弹对话框,我想让它等我第一个对话框关闭后在弹第二个对话框,然后第二关闭后在弹第三个对话框?

如果把弹对话框改为运行程序的话,那要命了。 全部一起运行10多个程序!电脑非卡死不可!
发表于 2011-2-28 21:36:38 | 显示全部楼层
回复 8# you6591098


    怎么会一起弹出对话框呢,当然是关闭一个 MsgBox 才会继续下一个对话框。
如果是运行外部程序当然不能用 Run() ,而要 RunWait()
发表于 2011-2-28 22:14:25 | 显示全部楼层
回复 9# afan


    哦。原来是这样!谢谢
发表于 2012-8-16 23:08:53 | 显示全部楼层
不错哦,研究研究。
发表于 2012-11-15 16:55:05 | 显示全部楼层
好东西,真是学习了。
发表于 2015-4-16 15:10:49 | 显示全部楼层
回复 6# afan
请教afan版主,安装时可否显示进度条,如:$Progress1 = GUICtrlCreateProgress(40, 169, 430, 13)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 05:57 , Processed in 0.085679 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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