dnvplj 发表于 2019-9-7 09:19:36

[已解决]如何分组判断复选框是否有被选中

本帖最后由 dnvplj 于 2019-9-7 10:42 编辑

请问各位朋友,我的问题是:
1、如何以组判断复选框是否有被选中(3个复选框以下为 1 组,包括3个)。
2、如有复选框被选中的就写入配置文件,第1组写入的值为 1 ,第二组写入的值为 2 ,以此类推,否则,写入 0 。

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

Opt("MustDeclareVars", 1)

Local $Form1 = GUICreate("分组判断复选框是否有选中", 615, 438, 192, 124)
Local $Button1 = GUICtrlCreateButton("查看", 408, 230, 81, 33)
Local $Chec = _Chec()

_Main()
Exit

Func _Main()
      
      GUISetState(@SW_SHOW)
      Local $nMsg
      While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                              Exit
                        Case $Button1
                              _UBound()
                EndSwitch
      WEnd
EndFunc   ;==>_Main

Func _Chec()

      Local $Chec, $i = 1
      For $i = 1 To 8
                $Chec[$i] = GUICtrlCreateCheckbox('Checkbox ' & $i, 100, 5 + 40 * $i, 120, 25)
      Next
      Return $Chec
EndFunc   ;==>_Chec

Func _UBound()
      
      For $i = 1 To UBound($Chec, 1) - 1
                If GUICtrlRead($Chec[$i]) = 1 Then
                        MsgBox(0, "提示", "我这组有被选中 !")
                        IniWrite(@ScriptDir & "\Soft.ini", $i, "Count", "?");以组为单位写入,第一组写入值为 1 ,第二组写入值为 2 ,以此类推
                Else
                        MsgBox(0, "提示", "我这组没被选中 !")
                        IniWrite(@ScriptDir & "\Soft.ini", $i, "Count", "?");以组为单位写入 0
                EndIf
      Next
EndFunc   ;==>_UBound


afan 发表于 2019-9-7 10:00:55

GUICreate("分组判断复选框是否有选中", 615, 438, -1, -1)
Global $Button1 = GUICtrlCreateButton("查看", 408, 230, 81, 33)
Global $Chec = _Chec()
GUISetState()
_Main()

Func _Main()
        Local $nMsg
        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case -3
                                Exit
                        Case $Button1
                                _UBound()
                EndSwitch
        WEnd
EndFunc   ;==>_Main

Func _Chec()
        Local $Chec, $i
        For $i = 1 To 8
                $Chec[$i] = GUICtrlCreateCheckbox('Checkbox ' & $i, 100, 5 + 40 * $i, 120, 25)
        Next
        Return $Chec
EndFunc   ;==>_Chec

Func _UBound()
        Local $nC = UBound($Chec)
        For $i = 1 To $nC - 1 Step 3
                If GUICtrlRead($Chec[$i]) = 1 Or ($nC > $i + 1 And GUICtrlRead($Chec[$i + 1]) = 1) Or ($nC > $i + 2 And GUICtrlRead($Chec[$i + 2]) = 1) Then
                        MsgBox(0, "提示", Floor($i / 3) + 1 & " 组有被选中 !")
                        IniWrite(@ScriptDir & "\Soft.ini", Floor($i / 3) + 1, "Count", "1");以组为单位写入,第一组写入值为 1 ,第二组写入值为 2 ,以此类推
                Else
                        MsgBox(0, "提示", Floor($i / 3) + 1 & " 组没被选中 !")
                        IniWrite(@ScriptDir & "\Soft.ini", Floor($i / 3) + 1, "Count", "0");以组为单位写入 0
                EndIf
        Next
EndFunc   ;==>_UBound

dnvplj 发表于 2019-9-7 10:15:31

afan 发表于 2019-9-7 10:00


非常感谢afan大,每次都是你帮我解决问题。

dnvplj 发表于 2019-9-7 10:25:44

afan 发表于 2019-9-7 10:00


afan大,能否在帮改下,如第一组有被选中的话“值”就写“1”,第二组有被选中的话就写”2“,以此类推,否则,就写入”0“,添麻烦了。

afan 发表于 2019-9-7 10:25:47

dnvplj 发表于 2019-9-7 10:15
非常感谢afan大,每次都是你帮我解决问题。

因为你的提问方式很好,彬彬有礼,代码整理得在重现问题的前提下很简洁。

afan 发表于 2019-9-7 10:28:40

dnvplj 发表于 2019-9-7 10:25
afan大,能否在帮改下,如第一组有被选中的话“值”就写“1”,第二组有被选中的话就写”2“,以此类推, ...

我现在是将字段名写为组名(而非你的1-8个组名),有一个选中即值为1

dnvplj 发表于 2019-9-7 10:29:34

afan 发表于 2019-9-7 10:25
因为你的提问方式很好,彬彬有礼,代码整理得在重现问题的前提下很简洁。

谢谢afan大,因本人基础太差,总是给你添麻烦。

dnvplj 发表于 2019-9-7 10:34:33

afan 发表于 2019-9-7 10:28
我现在是将字段名写为组名(而非你的1-8个组名),有一个选中即值为1
解决了,谢谢afan大提示。

afan 发表于 2019-9-7 10:36:42

dnvplj 发表于 2019-9-7 10:34
解决了,谢谢afan大提示。

不客气~ 举手之劳

Dontang2018 发表于 2019-9-8 19:23:02

学习学习。 学习学习。

Dontang2018 发表于 2019-9-12 10:24:38

也想知道,也想知道
页: [1]
查看完整版本: [已解决]如何分组判断复选框是否有被选中