Checkbox Kombination in Gui ... ?

  • Hallo zusammen
    Ich hab ein kleines Problem mit checkbox in einer GUI.
    Die Gui besteht aus 10 Checkboxen jenachdem welche gewählt ist soll nach Drücken des OK Buttons ein script ausgeführt werden.
    Möglich ist jede Kombination
    Beispiel
    1 checked
    9-10 unchecked

    oder 1, 2 6,9 checked
    rest unchecked u.s.w.

    für checked z.B. Einschalten
    für unchecked z.B. Ausschalten.

    gelöst habe ich das ganze bis jetzt und auch lauffähig wie folgt.

    [autoit]


    If $checkbox1_readcheck = $GUI_CHECKED AND $checkbox2_readcheck = $GUI_UNCHECKED AND .... AND $checkbox10_readcheck = $GUI_CHECKED Then
    func1_on ()
    func2_off ()
    ...
    func10_on ()

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

    wie gesagt klappt gut.
    Problem ist hier ... muss ja für jeden Zustand wieviel checkboxen angeklickt sind oder nicht eine Schleife schreiben.
    Wie kann ich mir die ganze Arbeit sparen und mein skript kleiner gestallten ?
    Geht sowas mit arrays ?
    Wenn ja kann mir da jemand einen Rat geben ?
    Vielen Dank im voraus
    Gruß viper 67

  • Du musst doch nur Für jede Checkbox schauen, ob sie an ist oder nicht, nicht immer alle testen :)

    Spoiler anzeigen
    [autoit]

    If $checkbox1_readcheck = $GUI_CHECKED Then
    _Check1_on()
    Else
    _Check1_off()
    EndIf
    If $checkbox2_readcheck = $GUI_CHECKED Then
    _Check2_on()
    Else
    _Check2_off()
    EndIf

    [/autoit]
  • Hab etwas ähnliches und übersichtlicheres geschrieben.

    Spoiler anzeigen
    [autoit]


    If (GUICtrlRead($checkbox1) <> $GUI_CHECKED) AND (GUICtrlRead($checkbox2) <> $GUI_CHECKED) Then

    If GUICtrlRead($checkbox1) = $GUI_CHECKED Then
    function(1, "on")
    Else
    function(1, "off")
    EndIf

    If GUICtrlRead($checkbox2) = $GUI_CHECKED Then
    function(2, "on")
    Else
    function(2, "off")
    EndIf
    EndIf

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

    Func function($s_id, $s_opt)
    Switch $s_id
    Case 1
    Switch $s_opt
    Case "on"
    ; Start
    Case "off"
    ; Stop
    EndSwitch
    Case 2
    Switch $s_opt
    Case "on"
    ; Start
    Case "off"
    ; Stop
    EndSwitch
    EndSwitch
    EndFunc

    [/autoit]
  • kommt darauf an, was es für Funktionen sind :) Eine weitere Möglichkeit wäre:

    Spoiler anzeigen
    [autoit]

    _Ischecked_Call($CheckBox1,"Func_On","Func_Off")
    _Ischecked_Call($CheckBox2,"Func2_On","Func2_Off")

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

    Func _Ischecked_Call($fTestctrl, $vTrueVal, $vFalseVal)
    If BitAnd(GUICtrlRead($fTestctrl), $GUI_CHECKED ) = $GUI_CHECKED Then
    Return Call($vTrueVal)
    Else
    Return Call($vFalseVal)
    EndIf
    EndFunc ;==>_Iif

    [/autoit]
  • Hallo,

    hier ein Beispiel mit einer weiteren Möglichkeit in Zeile 25:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    GUICreate("Checkbox-Abfrage", 300, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_quit')
    Global $Checkbox1 = GUICtrlCreateCheckbox("Ckb 1", 100, 125, 142)
    GUICtrlSetOnEvent($Checkbox1, "_EnableUpdate")

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

    ; [...]

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

    ; [...]

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

    Global $Checkbox10 = GUICtrlCreateCheckbox("Ckb 10", 100, 100, 142)
    Global $InputVerbindungOnboard = GUICtrlCreateInput("", 10, 152, 280, 21)
    GUICtrlSetOnEvent($Checkbox10, "_EnableUpdate")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _quit()
    Exit
    EndFunc ;==>_quit

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

    Func _EnableUpdate()
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then _test1()

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

    ; [...]

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

    ;[...]

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

    If BitAND(GUICtrlRead($Checkbox10), $GUI_CHECKED) Then _test10()
    EndFunc ;==>_EnableUpdate

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

    Func _test1()
    MsgBox(0, 'Test', 'Test1 funktioniert ! ')
    EndFunc

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

    Func _test10()
    MsgBox(0, 'Test', 'Test10 funktioniert ! ')
    EndFunc

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

    ; ENDE

    [/autoit]


    Viel Erfolg ! ;)

  • RR04: Der Threadstarter will aber 10 Checkboxen prüfen und dann die zugehörige Funktion starten

  • @Seven
    "Der Threadstarter will aber 10 Checkboxen prüfen"
    siehe Progandy Post #2 ;)

    Weiß ich. Aber mein Beispiel kann man erweitern. Der Threadstarter muss einfach bis 10 alles eintragen

  • Hallo zusammen
    vielen vielen Dank dass Ihr Euch so zahlreich gemeldet habt und auch so schnell. DANKE
    Ich teste das mal im Laufe der nächten Woche.
    Um die Frage zu beantworten möchte ich mit den checkboxen Laufwerke mappen.
    wenn die Haken gesetzt sind dann sollen freigegebene Verzeichnisse gemappt werden und wenn der Haken rausgenommen wird dann diese wieder trennen.
    Momentan sollen in den Funktionen func(x)_on oder func(x)_off weiter keine Befehle mehr ausgeführt werden.
    Ist aber Erweiterungsfähig mal sehen was mir noch so einfällt. ;)

    Gruß viper67

  • hi

    folgendes script war für meine bedürfnisse völlig ausreichend.

    [autoit]


    If $checkbox1_readcheck = $GUI_CHECKED Then
    _Check1_on()
    Else
    _Check1_off()
    EndIf

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

    If $checkbox2_readcheck = $GUI_CHECKED Then
    _Check2_on()
    Else
    _Check2_off()
    EndIf

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

    Vielen Dank an alle

    Gruß viper67