找回密码
 加入
搜索
查看: 4732|回复: 6

[GUI管理] 多个checkbox的组合,判断是否被check的问题

  [复制链接]
发表于 2010-5-25 16:05:12 | 显示全部楼层 |阅读模式
有多个checkbox,不同的组合需要调用不同的函数,有简单的方法可以判断checkbox的状态吗?目前使用的方法是guictrlread(),存在的问题是,只能判断单个checkbox的状态,checkbox较多时,判断语句太复杂,等高手指教
发表于 2010-5-25 16:48:12 | 显示全部楼层
本帖最后由 lanfengc 于 2010-5-25 16:58 编辑

其实,咱们都想复杂了。。。
只需要挨个检测就可以,如果选中则执行相应操作,如果没选,则不执行就可以了。 。
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Administrator\桌面\Form1.kxf
Global $Result=""
Global $Checkbox[20]
$Form1 = GUICreate("Form1", 482, 239, 192, 114)
$Checkbox[0] = GUICtrlCreateCheckbox("Checkbox1", 24, 16, 97, 17)
$Checkbox[1] = GUICtrlCreateCheckbox("Checkbox2", 24, 48, 97, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("Checkbox3", 24, 80, 97, 17)
$Checkbox[3] = GUICtrlCreateCheckbox("Checkbox4", 24, 112, 97, 17)
$Checkbox[4] = GUICtrlCreateCheckbox("Checkbox5", 24, 144, 97, 17)
$Checkbox[5] = GUICtrlCreateCheckbox("Checkbox6", 136, 16, 97, 17)
$Checkbox[6] = GUICtrlCreateCheckbox("Checkbox7", 136, 48, 97, 17)
$Checkbox[7] = GUICtrlCreateCheckbox("Checkbox8", 136, 80, 97, 17)
$Checkbox[8] = GUICtrlCreateCheckbox("Checkbox9", 136, 112, 97, 17)
$Checkbox[9] = GUICtrlCreateCheckbox("Checkbox10", 136, 144, 97, 17)
$Checkbox[10] = GUICtrlCreateCheckbox("Checkbox11", 264, 16, 97, 17)
$Checkbox[11] = GUICtrlCreateCheckbox("Checkbox12", 264, 48, 97, 17)
$Checkbox[12] = GUICtrlCreateCheckbox("Checkbox13", 264, 80, 97, 17)
$Checkbox[13] = GUICtrlCreateCheckbox("Checkbox14", 264, 112, 97, 17)
$Checkbox[14] = GUICtrlCreateCheckbox("Checkbox15", 264, 144, 97, 17)
$Checkbox[15] = GUICtrlCreateCheckbox("Checkbox16", 384, 16, 97, 17)
$Checkbox[16] = GUICtrlCreateCheckbox("Checkbox17", 384, 48, 97, 17)
$Checkbox[17] = GUICtrlCreateCheckbox("Checkbox18", 384, 80, 97, 17)
$Checkbox[18] = GUICtrlCreateCheckbox("Checkbox19", 384, 112, 97, 17)
$Checkbox[19] = GUICtrlCreateCheckbox("Checkbox20", 384, 144, 97, 17)
$CheckBT = GUICtrlCreateButton("检查", 192, 184, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $CheckBT
                                        If BitAND(GUICtrlRead($Checkbox[0]),$GUI_CHECKED) Then
                                                MsgBox(0,"","1Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[1]),$GUI_CHECKED) Then
                                                MsgBox(0,"","2Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[2]),$GUI_CHECKED) Then
                                                MsgBox(0,"","3Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[3]),$GUI_CHECKED) Then
                                                MsgBox(0,"","4Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[4]),$GUI_CHECKED) Then
                                                MsgBox(0,"","5Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[5]),$GUI_CHECKED) Then
                                                MsgBox(0,"","6Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[6]),$GUI_CHECKED) Then
                                                MsgBox(0,"","7Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[7]),$GUI_CHECKED) Then
                                                MsgBox(0,"","8Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[8]),$GUI_CHECKED) Then
                                                MsgBox(0,"","9Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[9]),$GUI_CHECKED) Then
                                                MsgBox(0,"","10Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[10]),$GUI_CHECKED) Then
                                                MsgBox(0,"","11Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[11]),$GUI_CHECKED) Then
                                                MsgBox(0,"","12Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[12]),$GUI_CHECKED) Then
                                                MsgBox(0,"","13Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[13]),$GUI_CHECKED) Then
                                                MsgBox(0,"","14Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[14]),$GUI_CHECKED) Then
                                                MsgBox(0,"","15Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[15]),$GUI_CHECKED) Then
                                                MsgBox(0,"","16Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[16]),$GUI_CHECKED) Then
                                                MsgBox(0,"","17Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[17]),$GUI_CHECKED) Then
                                                MsgBox(0,"","18Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[18]),$GUI_CHECKED) Then
                                                MsgBox(0,"","19Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox[19]),$GUI_CHECKED) Then
                                                MsgBox(0,"","20Checked!")
                                        EndIf
        EndSwitch
WEnd
 楼主| 发表于 2010-5-25 17:26:50 | 显示全部楼层
感谢楼上的回复,用这种方法是可以判断某一个checkbox,但是,我想判断的是,如果某一个checkbox的状态(如,被选中)时,其他19个是不是也有被选中的,然后不同的被选中的checkbox的组合,调用的函数不同。
比如,checkbox1 和checkbox2都选中的时候,调用一个函数,但是可能同时可能checkbox3也是被选中的,那么这三个同时选中的时候调用的是另一个函数,这样的组合太多了,如果用上面的方法,是不是要判断的条件太多了?
发表于 2010-5-25 22:19:48 | 显示全部楼层
本帖最后由 lanfengc 于 2010-5-25 22:21 编辑

回复 3# piaoa_998

这样的判断, 20个按钮需要几千个case语句。
发表于 2010-5-25 22:28:49 | 显示全部楼层
所以他的按钮不多就可以满足要求了啊,完全是排列组合。
发表于 2010-5-25 22:29:45 | 显示全部楼层
不过可以用循环来做,关键是你用得着那么多组合吗?多了自己都晕了。
发表于 2010-5-25 22:42:57 | 显示全部楼层
本帖最后由 netegg 于 2010-5-25 22:48 编辑

switch not 0
   case BitAnd($guictrlread($check[$i]), $gui_checked)
     dochoose($i)
endswitch
func dochoose($i)
$j =1
while
  If $j>$i then return
else
     具体判断
endif
$j += 1
wend
endfun
不好意思,没多想到底是递增好还是递减好,自己试试看吧
只是给个思路,具体操作,看你怎么折腾你的复选框了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 03:09 , Processed in 0.080772 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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