Checkboxen checken und unchecken

  • Ein Anfänger braucht wieder einmal Eure Hilfe:

    Ich habe mir eine Gui (für Testzwecke) mit insgesamt 4 Checkboxen. Bisher habe ich es soweit geschafft, daß - wenn ich Checkbox 4 anhake - auch gleich die anderen 3 Boxen checked bzw. unchecked werden....soweit so gut....ich bringe jedoch folgendes nicht zustande bzw. fehlt mir die Logik:

    Was muss ich jetzt noch ergänzen, damit Box 4 auch ein Hakerl kriegt bzw. wieder verliert, wenn ich Box 1 - 3 oder wenn ich von den 3 Boxen (die markiert sind) ein Hakerl rausnehme (in dem Falle sollte Checkbox 4 das Hakerl verlieren..markiere ich alle 3, soll es eines kriegen).....und ist das alles in einer Kurzform möglich???

    Spoiler anzeigen

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

    #Region ### START Koda GUI section ### Form=F:\downloads\autoit\scripts\Form1.kxf
    $Form1_1 = GUICreate("Form1", 291, 124, 193, 125)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 128, 56, 97, 17)
    $Group1 = GUICtrlCreateGroup("Group1", 16, 8, 97, 97)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 24, 32, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 24, 56, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 24, 80, 97, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox4
    if GUICtrlRead($Checkbox4) = $gui_checked Then
    GUICtrlSetState($Checkbox1,$gui_checked)
    GUICtrlSetState($Checkbox2,$gui_checked)
    GUICtrlSetState($Checkbox3,$gui_checked)
    Elseif GUICtrlRead($Checkbox4) = $gui_unchecked Then
    GUICtrlSetState($Checkbox1,$gui_unchecked)
    GUICtrlSetState($Checkbox2,$gui_unchecked)
    GUICtrlSetState($Checkbox3,$gui_unchecked)
    EndIf


    EndSwitch
    WEnd

    Einmal editiert, zuletzt von superpati (13. April 2009 um 14:37)

  • Füge das in deine While-Schleife ein:

    Spoiler anzeigen
    [autoit]

    Case $Checkbox1, $Checkbox2, $Checkbox3
    If GUICtrlRead($Checkbox1) = $gui_checked And GUICtrlRead($Checkbox2) = $gui_checked and GUICtrlRead($Checkbox3) = $gui_checked Then
    GUICtrlSetState($Checkbox4,$gui_checked)
    Else
    GUICtrlSetState($Checkbox4,$gui_unchecked)
    EndIf

    [/autoit]
    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=F:\downloads\autoit\scripts\Form1.kxf
    $Form1_1 = GUICreate("Form1", 291, 124, 193, 125)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 128, 56, 97, 17)
    $Group1 = GUICtrlCreateGroup("Group1", 16, 8, 97, 97)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 24, 32, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 24, 56, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 24, 80, 97, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox4
    If BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED) = $GUI_CHECKED Then
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUICtrlSetState($Checkbox2, $GUI_CHECKED)
    GUICtrlSetState($Checkbox3, $GUI_CHECKED)
    Else
    GUICtrlSetState($Checkbox1, $gui_unchecked)
    GUICtrlSetState($Checkbox2, $gui_unchecked)
    GUICtrlSetState($Checkbox3, $gui_unchecked)
    EndIf
    Case $Checkbox1, $Checkbox2, $Checkbox3
    If GUICtrlRead($Checkbox1) = $GUI_CHECKED And GUICtrlRead($Checkbox2) = $GUI_CHECKED And GUICtrlRead($Checkbox3) = $GUI_CHECKED Then
    GUICtrlSetState($Checkbox4, $GUI_CHECKED)
    Else
    GUICtrlSetState($Checkbox4, $gui_unchecked)
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Edit: hab den Code von ChaosKeks entliehen und mit eingebaut . :D

    • Offizieller Beitrag

    Und hier eine Version mit Array:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=F:\downloads\autoit\scripts\Form1.kxf
    $Form1_1 = GUICreate("Form1", 291, 124, 193, 125)
    Global $Checkbox[4]
    $Checkbox[3] = GUICtrlCreateCheckbox("Checkbox4", 128, 56, 97, 17)
    $Group1 = GUICtrlCreateGroup("Group1", 16, 8, 97, 97)
    $Checkbox[0] = GUICtrlCreateCheckbox("Checkbox1", 24, 32, 97, 17)
    $Checkbox[1] = GUICtrlCreateCheckbox("Checkbox2", 24, 56, 97, 17)
    $Checkbox[2] = GUICtrlCreateCheckbox("Checkbox3", 24, 80, 97, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox[3]
    If BitAND(GUICtrlRead($Checkbox[3]), $GUI_CHECKED) Then
    For $i = 0 To 2
    GUICtrlSetState($Checkbox[$i], $GUI_CHECKED)
    Next
    Else
    For $i = 0 To 2
    GUICtrlSetState($Checkbox[$i], $GUI_UNCHECKED)
    Next
    EndIf
    Case $Checkbox[0], $Checkbox[1], $Checkbox[2]
    $check = 0
    For $i = 0 To 2
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then $check += 1
    Next
    If $check = 3 Then
    GUICtrlSetState($Checkbox[3], $GUI_CHECKED)
    Else
    GUICtrlSetState($Checkbox[3], $GUI_UNCHECKED)
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Nobody is perfect ;]

    Oscar : Arrays warn eig auch meine erste Idee, hab dann aber gemerkt das das eher länger wird, statt kürzer :D Trotzdem finde ich deine Lösung fast ein wenig schöner, weil ich es hasse wenn Zeilen länger sind als das normale Editorfenster erlaubt...

    • Offizieller Beitrag

    Oscar dein Script is aber eher was für Fortgeschrittene . Ich denk die meisten Neulinge sind bei Array´s überfordert .

    • Offizieller Beitrag

    @ChaosKeks: Ja, drei Checkboxen sind gerade so die Grenze, wo das Script mit Arrays noch etwas länger wird, weil die For...Next-Schleifen jeweils drei Zeilen in Anspruch nehmen, aber wenn man mehr Checkboxen (>3) abfragen will, ist die Array-Variante deutlich besser.

    Raupi : Ich weiß, dass sich Einsteiger mit Arrays immer etwas schwertun, aber ich denke gerade so ein einfaches Script ist für das Verständnis von Arrays doch eher förderlich. Gerade wenn man, wie hier, einen direkten Vergleich zu einem Script ohne Arrays hat.