找回密码
 加入
搜索
楼主: mo_shaojie

[AU3基础] (已解决)请教个复选框的问题

 火.. [复制链接]
发表于 2011-4-25 16:16:52 | 显示全部楼层
本帖最后由 netegg 于 2011-4-25 16:21 编辑

回复 14# 水木子
好像有点问题,从未全选到全选好办,从全选出来似乎不好弄,就是说原状态两个复选都选中,现在退出全选状态只保留推荐选中
 楼主| 发表于 2011-4-25 21:40:51 | 显示全部楼层
回复  水木子
好像有点问题,从未全选到全选好办,从全选出来似乎不好弄,就是说原状态两个复选都选中,现 ...
netegg 发表于 2011-4-25 16:16


对,是有问题.未完全解决.
发表于 2011-4-25 22:18:43 | 显示全部楼层
本帖最后由 lixiaolong 于 2011-4-25 22:30 编辑

回复 1# mo_shaojie


看看这样可不可以?
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Dim $Checkbox[19]
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Checkbox[1] = GUICtrlCreateCheckbox("Checkbox1", 48, 32, 97, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("Checkbox2", 48, 64, 97, 17)
$Checkbox[3] = GUICtrlCreateCheckbox("Checkbox3", 48, 104, 97, 17)
$Checkbox[4] = GUICtrlCreateCheckbox("Checkbox4", 48, 136, 97, 17)
$Checkbox[5] = GUICtrlCreateCheckbox("Checkbox5", 48, 176, 97, 17)
$Checkbox[6] = GUICtrlCreateCheckbox("Checkbox6", 48, 216, 97, 17)
$Checkbox[7] = GUICtrlCreateCheckbox("Checkbox7", 48, 256, 97, 17)
$Checkbox[8] = GUICtrlCreateCheckbox("Checkbox8", 48, 296, 97, 17)
$Checkbox[9] = GUICtrlCreateCheckbox("Checkbox9", 48, 336, 97, 17)
$Checkbox[10] = GUICtrlCreateCheckbox("Checkbox10", 48, 376, 97, 17)
$Checkbox[11] = GUICtrlCreateCheckbox("Checkbox11", 48, 416, 97, 17)
$Checkbox[12] = GUICtrlCreateCheckbox("Checkbox12", 216, 32, 97, 17)
$Checkbox[13] = GUICtrlCreateCheckbox("Checkbox13", 216, 64, 97, 17)
$Checkbox[14] = GUICtrlCreateCheckbox("Checkbox14", 216, 104, 97, 17)
$Checkbox[15] = GUICtrlCreateCheckbox("Checkbox15", 216, 144, 97, 17)
$Checkbox[16] = GUICtrlCreateCheckbox("Checkbox16", 216, 184, 97, 17)
$Checkbox[17] = GUICtrlCreateCheckbox("Checkbox17", 216, 224, 97, 17)
$Checkbox[18] = GUICtrlCreateCheckbox("Checkbox18", 216, 264, 97, 17)
$Checkbox19 = GUICtrlCreateCheckbox("全选", 392, 312, 97, 17)
$Checkbox20 = GUICtrlCreateCheckbox("推荐", 392, 352, 97, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Checkbox20
                        For $i = 1 To UBound($Checkbox) - 1
                                GUICtrlSetState($Checkbox[$i], $GUI_UNCHECKED)
                        Next
                        For $i = 10 To 13
                                If GUICtrlRead($Checkbox20) = $GUI_UNCHECKED Then
                                        $Checkd = $GUI_UNCHECKED
                                Else
                                        $Checkd = $GUI_CHECKED
                                EndIf
                                
                                If GUICtrlRead($Checkbox19, 1) = "全不选" Then
                                        GUICtrlSetState($Checkbox19, $GUI_UNCHECKED)
                                        GUICtrlSetData($Checkbox19, "全选")
                                EndIf
                                GUICtrlSetState($Checkbox[$i], $Checkd)
                                
                        Next
                Case $Checkbox19
                        If GUICtrlRead($Checkbox19, 1) = "全选" Then
                                $Checkd = $GUI_CHECKED
                                GUICtrlSetData($Checkbox19, "全不选")
                                GUICtrlSetState($Checkbox20, $GUI_UNCHECKED)
                        Else
                                $Checkd = $GUI_UNCHECKED
                                GUICtrlSetData($Checkbox19, "全选")
                        EndIf
                        
                        For $i = 1 To UBound($Checkbox) - 1
                                GUICtrlSetState($Checkbox[$i], $Checkd)
                        Next

        EndSwitch
WEnd


要是不想把"全选" 改成 "全不选" 的话可以改成"全选 "(加一个空格),这样就看不出来了.
发表于 2011-4-26 07:49:20 | 显示全部楼层
本帖最后由 netegg 于 2011-4-26 07:59 编辑

回复 18# lixiaolong

不好意思,说句可能大概不该说的话,你看明白上面几层说的了吗?
现在的目的是如果当初从推荐选中后变成全选,然后退出全选只保留推荐选中,明白否?
更概括地说,如何从全部选中变成部分选中(这个选中的部分是上次操作出来的,不是初始值)
发表于 2011-4-26 08:03:52 | 显示全部楼层
回复 1# mo_shaojie
楼主,别急,昨天和水木交流过,再看看有没有别的变通的方法,应该不是很难,不过是逻辑运算很麻烦
发表于 2011-4-26 08:07:33 | 显示全部楼层
我日,这么简单的事,等我喝够了告诉你,easy
 楼主| 发表于 2011-4-26 08:46:02 | 显示全部楼层
我日,这么简单的事,等我喝够了告诉你,easy
netegg 发表于 2011-4-26 08:07


我靠,逻辑性的问题很难转弯的,有时绕到头都晕.还easy呢?你想到什么方法了.期待中....
 楼主| 发表于 2011-4-26 08:50:34 | 显示全部楼层
回复  mo_shaojie


看看这样可不可以?


要是不想把"全选" 改成 "全不选" 的话可以改成"全选 "(加 ...
lixiaolong 发表于 2011-4-25 22:18


这个有点近了,只不过全选去掉勾就是全不选了.设置文字全不选似乎是鸡肋.
发表于 2011-4-26 09:47:35 | 显示全部楼层
回复 19# netegg

不好意思,我没看上面的回复,现在明白了.
发表于 2011-4-26 09:55:52 | 显示全部楼层
本帖最后由 netegg 于 2011-4-26 22:18 编辑

完蛋了,这脑袋该扔了,反选的时候先判断就完了
发表于 2011-4-26 10:04:11 | 显示全部楼层
这个好玩,试下。
蛋蛋别喷我。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Dim $Checkbox[19]
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Checkbox[1] = GUICtrlCreateCheckbox("Checkbox1", 48, 32, 97, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("Checkbox2", 48, 64, 97, 17)
$Checkbox[3] = GUICtrlCreateCheckbox("Checkbox3", 48, 104, 97, 17)
$Checkbox[4] = GUICtrlCreateCheckbox("Checkbox4", 48, 136, 97, 17)
$Checkbox[5] = GUICtrlCreateCheckbox("Checkbox5", 48, 176, 97, 17)
$Checkbox[6] = GUICtrlCreateCheckbox("Checkbox6", 48, 216, 97, 17)
$Checkbox[7] = GUICtrlCreateCheckbox("Checkbox7", 48, 256, 97, 17)
$Checkbox[8] = GUICtrlCreateCheckbox("Checkbox8", 48, 296, 97, 17)
$Checkbox[9] = GUICtrlCreateCheckbox("Checkbox9", 48, 336, 97, 17)
$Checkbox[10] = GUICtrlCreateCheckbox("Checkbox10", 48, 376, 97, 17)
$Checkbox[11] = GUICtrlCreateCheckbox("Checkbox11", 48, 416, 97, 17)
$Checkbox[12] = GUICtrlCreateCheckbox("Checkbox12", 216, 32, 97, 17)
$Checkbox[13] = GUICtrlCreateCheckbox("Checkbox13", 216, 64, 97, 17)
$Checkbox[14] = GUICtrlCreateCheckbox("Checkbox14", 216, 104, 97, 17)
$Checkbox[15] = GUICtrlCreateCheckbox("Checkbox15", 216, 144, 97, 17)
$Checkbox[16] = GUICtrlCreateCheckbox("Checkbox16", 216, 184, 97, 17)
$Checkbox[17] = GUICtrlCreateCheckbox("Checkbox17", 216, 224, 97, 17)
$Checkbox[18] = GUICtrlCreateCheckbox("Checkbox18", 216, 264, 97, 17)
$Checkbox19 = GUICtrlCreateCheckbox("全选", 392, 312, 97, 17)
$Checkbox20 = GUICtrlCreateCheckbox("推荐", 392, 352, 97, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Checkbox20
                        For $i = 10 To 13
                                If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                        Next

                Case $Checkbox19
                        If GUICtrlRead($Checkbox19) = 4 Then
                                For $i = 1 To 18
                                        GUICtrlSetState($Checkbox[$i], $GUI_UNCHECKED)
                                Next
                                
                                For $i = 10 To 13
                                        If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                                Next
                        Else
                                For $i = 1 To 18
                                        GUICtrlSetState($Checkbox[$i], $GUI_CHECKED)
                                Next
                                For $i = 10 To 13
                                        If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                                Next
                        EndIf

        EndSwitch
WEnd
发表于 2011-4-26 10:55:44 | 显示全部楼层
本帖最后由 netegg 于 2011-4-26 22:18 编辑

回复 26# 3mile
3mile这有点夸张了,没这么复杂,结合水木的回复基本上可以搞定了
说实话,如果真做的话,完全可以两个bit搞定,自己先设定0x0或者0x100

随便整

另外说句, 大家可能把位想复杂了,说白了就是定项反选
发表于 2011-4-26 14:03:11 | 显示全部楼层
回复 19# netegg

是不是这个意思?借用3mile前辈的代码.

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

Dim $Checkbox[19]
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Checkbox[1] = GUICtrlCreateCheckbox("Checkbox1", 48, 32, 97, 17)
$Checkbox[2] = GUICtrlCreateCheckbox("Checkbox2", 48, 64, 97, 17)
$Checkbox[3] = GUICtrlCreateCheckbox("Checkbox3", 48, 104, 97, 17)
$Checkbox[4] = GUICtrlCreateCheckbox("Checkbox4", 48, 136, 97, 17)
$Checkbox[5] = GUICtrlCreateCheckbox("Checkbox5", 48, 176, 97, 17)
$Checkbox[6] = GUICtrlCreateCheckbox("Checkbox6", 48, 216, 97, 17)
$Checkbox[7] = GUICtrlCreateCheckbox("Checkbox7", 48, 256, 97, 17)
$Checkbox[8] = GUICtrlCreateCheckbox("Checkbox8", 48, 296, 97, 17)
$Checkbox[9] = GUICtrlCreateCheckbox("Checkbox9", 48, 336, 97, 17)
$Checkbox[10] = GUICtrlCreateCheckbox("Checkbox10", 48, 376, 97, 17)
$Checkbox[11] = GUICtrlCreateCheckbox("Checkbox11", 48, 416, 97, 17)
$Checkbox[12] = GUICtrlCreateCheckbox("Checkbox12", 216, 32, 97, 17)
$Checkbox[13] = GUICtrlCreateCheckbox("Checkbox13", 216, 64, 97, 17)
$Checkbox[14] = GUICtrlCreateCheckbox("Checkbox14", 216, 104, 97, 17)
$Checkbox[15] = GUICtrlCreateCheckbox("Checkbox15", 216, 144, 97, 17)
$Checkbox[16] = GUICtrlCreateCheckbox("Checkbox16", 216, 184, 97, 17)
$Checkbox[17] = GUICtrlCreateCheckbox("Checkbox17", 216, 224, 97, 17)
$Checkbox[18] = GUICtrlCreateCheckbox("Checkbox18", 216, 264, 97, 17)
$Checkbox19 = GUICtrlCreateCheckbox("全选", 392, 312, 97, 17)
$Checkbox20 = GUICtrlCreateCheckbox("推荐", 392, 352, 97, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Checkbox20
                        For $i = 10 To 13
                                If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                        Next
                Case $Checkbox19
                        If GUICtrlRead($Checkbox19) = 1 Then
                                $a = Checkd()
                        EndIf
                        
                        If GUICtrlRead($Checkbox19) = 4 Then
                                For $i = 1 To 18
                                        GUICtrlSetState($Checkbox[$i], 4)
                                Next

                                For $i = 10 To 13
                                        If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                                Next
                                
                                If GUICtrlRead($Checkbox20) = 4 Then
                                        For $i = 1 To 18
                                                If $a[$i] = 1 Then
                                                        GUICtrlSetState($Checkbox[$i], 1)
                                                Else
                                                        GUICtrlSetState($Checkbox[$i], 4)
                                                EndIf
                                        Next
                                EndIf
                        Else
                                For $i = 1 To 18
                                        GUICtrlSetState($Checkbox[$i], 1)
                                Next
                                For $i = 10 To 13
                                        If GUICtrlRead($Checkbox19) = 4 Then GUICtrlSetState($Checkbox[$i], GUICtrlRead($Checkbox20))
                                Next
                                
                        EndIf

        EndSwitch
WEnd

Func Checkd()
        If GUICtrlRead($Checkbox19) = 1 Then
                Local $a[19]
                For $i = 1 To 18
                        If GUICtrlRead($Checkbox[$i]) = 1 Then
                                $a[$i] = 1
                        Else
                                $a[$i] = 0
                        EndIf
                Next
        EndIf
        Return $a
EndFunc   ;==>Checkd
发表于 2011-4-26 15:25:37 | 显示全部楼层
回复 28# lixiaolong
结果对了,不过有没有直接走位运算的可能,个人认为应该有
发表于 2011-4-26 16:03:30 | 显示全部楼层
把问题扩展下,如果是多个不完全选择和一个全选,全选否定的时候把另外和选定相挂钩的项选定
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-27 12:14 , Processed in 0.148465 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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