Anzahl aktiver Checkboxen zählen

  • Naben zusamm.

    Mir ist grad etwas langweilig und deswegen wollt ich mal bissl rumbasteln ^^

    Hab mal ne kleine aber feine Frage:

    Und zwar, ist es möglich, die Anzahl aktiver Checkboxen zu zählen, die sich in einer Gruppe befinden?

    Hab schonmal etwas in der hilfe geguckt, aber finde dazu nix...


    Sry, ein script hab ich noch net wirklich ^^

    MfG

  • Hmm, darfstu dafür wissen wieviele und welche checkboxen sich in dieser gruppe befinden, oder ist das immer zufällig?

  • Es soll so ne Art Lotto für den Heimbedarf werden ^^
    ( Was willsterwarten wenn mir langweilig is )

    In der Gruppe sollen also 49 Checkboxen sein.
    Davon soll man aber nur 6 markiert können.
    Wenn man 6 markiert hat, sollen die anderen 43 Deaktivier werden ( GUICtrlSetState (-1, GUI_DISABLE)

  • 1.Möglichkeit-> Du erstellst dir eine Variable und ziehst immer 1 ab oder fügst 1 hinzu wenn, eine Checkbox an/abgewählt wird..
    2.Möglichkeit-> Du prüfst kontinuierlich mit GuiCtrlRead alle checkboxen nacheinander (1 = angewählt, 4 = nicht angewählt) und checkst ob die Summe aller Checkboxen über einer bestimmten zahl liegt!

  • Dann würde ich im OnEventMode auf jede Checkbox eine Funktion legen,
    die im Falle des Checks einer Checkbox einen Globalen Counter erhöht,
    im Falle des UnChecks eben verringert.
    Und falls Counter = 6: Deaktivierung der anderen.

    Edit: Hm. Zu langsam. *gähn* ^^

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • So, hab schonmal angefangen, hab das mit nem array gemacht. ( Das erstemal wo ich was mit arrays mach )

    Sieht jetz schonmal so aus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $Check[49]
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 350, 400, 193, 125)
    $Label1 = GUICtrlCreateLabel("LOTTO", 105, 5, 117, 40)
    GUICtrlSetFont(-1, 24, 800, 4, "Times New Roman")
    For $i = 0 To 48
    $check[$i] = GUICtrlCreateCheckbox('' & $i+1, 50+Mod($i,7)*35, 50+Int($i/7)*30, 30, 20) ; hier wird dem jeweiligen Array-Element eine Button-ID zugewiesen
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Die möglichkeit 2 von ChaosKeks höhrt sich gut an, ich glaub das mach ich so ^^
    Ich versuchs gleich mal.

    • Offizieller Beitrag

    Limette hatte schon recht. Im OnEvent-Mode ist das einfacher:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('Test', 510, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

    [/autoit] [autoit][/autoit] [autoit]

    Global $ahCheck[49]
    For $i = 0 To 48
    $ahCheck[$i] = GUICtrlCreateCheckbox($i+1, 20+Mod($i,7)*70, 10+Int($i/7)*30, 60, 25)
    GUICtrlSetOnEvent(-1, '_CheckboxCounter')
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $hCount = GUICtrlCreateLabel('0', 200, 250, 120, 25)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CheckboxCounter()
    Local $iCount = 0
    For $i = 0 To 48
    $iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
    Next
    GUICtrlSetData($hCount, $iCount)
    EndFunc

    [/autoit]
  • Ok, das ieht soweit schon sehr gut aus.

    Nur wie Deaktiviere ich jetz jetz alle Checkboxen, auser die markierten, wenn 6 stück markiert sind?

  • [autoit]

    For $i = 0 To Ubound($check)-1
    If GuiCtrlRead($check[$i]) = 1 Then
    GuiCtrlSetState($check[$i],$Gui_Disable)
    EndIf
    Next

    [/autoit]

    Bzw. ->

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('Test', 510, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

    [/autoit] [autoit][/autoit] [autoit]

    Global $ahCheck[49]
    For $i = 0 To 48
    $ahCheck[$i] = GUICtrlCreateCheckbox($i+1, 20+Mod($i,7)*70, 10+Int($i/7)*30, 60, 25)
    GUICtrlSetOnEvent(-1, '_CheckboxCounter')
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $hCount = GUICtrlCreateLabel('0', 200, 250, 120, 25)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CheckboxCounter()
    Local $iCount = 0
    For $i = 0 To 48
    $iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
    Next
    GUICtrlSetData($hCount, $iCount)
    If $iCount = 6 Then
    For $i = 0 To Ubound($ahcheck)-1
    If GuiCtrlRead($ahcheck[$i]) = 4 Then
    GuiCtrlSetState($ahcheck[$i],$Gui_Disable)
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]
  • Super, habs noch so gemacht, dass die Checkboxen wieder aktiviert werden, wenn eine der 6 markierten nicht mehr markiert ist ^^

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)
    GUICreate('Test', 510, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    Global $ahCheck[49]
    For $i = 0 To 48
    $ahCheck[$i] = GUICtrlCreateCheckbox($i+1, 20+Mod($i,7)*70, 10+Int($i/7)*30, 60, 25)
    GUICtrlSetOnEvent(-1, '_CheckboxCounter')
    Next
    $hCount = GUICtrlCreateLabel('0', 200, 250, 120, 25)
    GUISetState()
    While True
    Sleep(50)
    WEnd
    Func _End()
    Exit
    EndFunc
    Func _CheckboxCounter()
    Local $iCount = 0
    For $i = 0 To 48
    $iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
    Next
    GUICtrlSetData($hCount, $iCount)
    If $iCount = 6 Then
    For $i = 0 To Ubound($ahcheck)-1
    If GuiCtrlRead($ahcheck[$i]) = 4 Then
    GuiCtrlSetState($ahcheck[$i],$Gui_Disable)
    EndIf
    Next
    Else
    For $i = 0 To Ubound($ahcheck)-1
    If GuiCtrlRead($ahcheck[$i]) = 4 Then
    GuiCtrlSetState($ahcheck[$i],$Gui_Enable)
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]


    Thx

    Aber jetz geh ich erstmal :sleeping: muss morgen arbeiten :pinch: