piaoa_998 发表于 2010-5-25 16:05:12

多个checkbox的组合,判断是否被check的问题

有多个checkbox,不同的组合需要调用不同的函数,有简单的方法可以判断checkbox的状态吗?目前使用的方法是guictrlread(),存在的问题是,只能判断单个checkbox的状态,checkbox较多时,判断语句太复杂,等高手指教

lanfengc 发表于 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
$Form1 = GUICreate("Form1", 482, 239, 192, 114)
$Checkbox = GUICtrlCreateCheckbox("Checkbox1", 24, 16, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox2", 24, 48, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox3", 24, 80, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox4", 24, 112, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox5", 24, 144, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox6", 136, 16, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox7", 136, 48, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox8", 136, 80, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox9", 136, 112, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox10", 136, 144, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox11", 264, 16, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox12", 264, 48, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox13", 264, 80, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox14", 264, 112, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox15", 264, 144, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox16", 384, 16, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox17", 384, 48, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox18", 384, 80, 97, 17)
$Checkbox = GUICtrlCreateCheckbox("Checkbox19", 384, 112, 97, 17)
$Checkbox = 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),$GUI_CHECKED) Then
                                                MsgBox(0,"","1Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","2Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","3Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","4Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","5Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","6Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","7Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","8Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","9Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","10Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","11Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","12Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","13Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","14Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","15Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","16Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","17Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","18Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","19Checked!")
                                        EndIf
                                        If BitAND(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
                                                MsgBox(0,"","20Checked!")
                                        EndIf
        EndSwitch
WEnd

piaoa_998 发表于 2010-5-25 17:26:50

感谢楼上的回复,用这种方法是可以判断某一个checkbox,但是,我想判断的是,如果某一个checkbox的状态(如,被选中)时,其他19个是不是也有被选中的,然后不同的被选中的checkbox的组合,调用的函数不同。
比如,checkbox1 和checkbox2都选中的时候,调用一个函数,但是可能同时可能checkbox3也是被选中的,那么这三个同时选中的时候调用的是另一个函数,这样的组合太多了,如果用上面的方法,是不是要判断的条件太多了?

lanfengc 发表于 2010-5-25 22:19:48

本帖最后由 lanfengc 于 2010-5-25 22:21 编辑

回复 3# piaoa_998

这样的判断, 20个按钮需要几千个case语句。

ebhb 发表于 2010-5-25 22:28:49

所以他的按钮不多就可以满足要求了啊,完全是排列组合。

ebhb 发表于 2010-5-25 22:29:45

不过可以用循环来做,关键是你用得着那么多组合吗?多了自己都晕了。

netegg 发表于 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
不好意思,没多想到底是递增好还是递减好,自己试试看吧
只是给个思路,具体操作,看你怎么折腾你的复选框了
页: [1]
查看完整版本: 多个checkbox的组合,判断是否被check的问题