Abhänigkeit von Checkboxen

  • Moin zusammen,

    ich habe ein kleines Problem mit Ckeckboxen. Ich habe einen GUI erstellt mit der Software installiert werden soll. Es gibt 6 Checkboxen und einen Button.

    Der Button ist standardmäßig deaktiviert, und wird erst aktiv, wenn mindestens eine Checkbox auf "checked" gesetzt wird. Das habe ich mit

    [autoit]


    Case
    $Checkbox1 To $Checkbox5
    GUICtrlSetState($Button1, $GUI_Disable)
    For $i = $Checkbox1 To $Checkbox5
    If GUICtrlRead($i) = 1 Then
    GUICtrlSetState($Button1, $GUI_enable)
    EndIf
    Next

    [/autoit]

    gelöst. Jetzt kommt aber noch hinzu, dass Checkbox3 und Checkbox4 inaktiv sind und erst aktiviert werden sollen, wenn Checkbox2 auf "checked" gesetzt wird. Seitdem ich die Abhängigkeit drin hab, funktioniert das nicht mehr korrekt mit dem Button. :(

    Hoffe, ihr könnt mir helfen...

    Gruß
    scheilo

    Einmal editiert, zuletzt von scheilo (2. März 2012 um 08:06)

  • Hallo Scheilo,

    am einfachsten ist es zu lösen wenn du für die ControlId's und die Beschriftung derCheckBoxen ein 2D-Array verwendest:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $msg, $idChk[6][2], $idBtnOK
    $idChk[0][1] = "Ich bin die erste"
    $idChk[1][1] = "Zweite, ausserdem sind 3 und 4 von mir abhängig"
    $idChk[2][1] = "dritte"
    $idChk[3][1] = "vierte"
    $idChk[3][1] = "fünfte"
    $idChk[5][1] = "letzte, wie immer"
    GUICreate("Meine GUI abhängigen Checkboxen und abhängiger Button") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
    for $i = 0 to 5
    $idChk[$i][0] = GUICtrlCreateCheckbox($idChk[$i][1], 10, 10+$i*25, 320, 20)
    Next
    $idBtnOK = GUICtrlCreateButton("&OK",10,170)
    _CheckOK()
    GUISetState() ; Zeigt eine Dialogbox mit 1 Checkbox an

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

    ; Die Schleife wiederholt sich, bis der Benutzer eine Beenden-Aktion auslöst
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    case $idChk[0][0] to $idChk[5][0]
    _CheckOK()
    EndSwitch
    WEnd

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

    Func _CheckOK()
    Local $bOK = False
    for $i = 0 to 5
    if BitAND(GUICtrlRead($idChk[$i][0]),$GUI_CHECKED) Then
    $bOK =True
    ExitLoop
    EndIf
    Next
    if $bOK Then
    GUICtrlSetState($idBtnOK,$GUI_ENABLE)
    Else
    GUICtrlSetState($idBtnOK,$GUI_DISABLE)
    EndIf
    if BitAND(GUICtrlRead($idChk[1][0]),$GUI_CHECKED) Then
    GUICtrlSetState($idChk[2][0],$GUI_ENABLE)
    GUICtrlSetState($idChk[3][0],$GUI_ENABLE)
    Else
    GUICtrlSetState($idChk[2][0],$GUI_DISABLE)
    GUICtrlSetState($idChk[3][0],$GUI_DISABLE)
    EndIf
    EndFunc

    [/autoit]

    mfg autoBert