Checkboxen auf Haken überprüfen

  • Ich habe aus einem Array Checkboxen erstellt. Folgendermaßen:

    Spoiler anzeigen
    [autoit]

    $programme = _FileListToArray(@ScriptDir&"\Programme", "*", 2)
    _ArraySort($programme)
    For $x = 1 to $programme[0]
    GUICtrlCreateCheckbox($programme[$x],10,10+($x-1)*(17),140,15)
    Next

    [/autoit]

    Jetzt möchte ich in der GUI abfragen, welchen Status sie haben und z.B. zum Testen eine Messagebox ausgeben.
    Bin ich auf dem richtigen Weg?

    Spoiler anzeigen
    [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_start
    For $h = 1 To UBound($programme[0])
    ;Wenn Markiert ...
    If GUICtrlRead($programme[$h]) = $GUI_CHECKED Then
    ;Dann Messagebox mit Title = Checkboxname, Message=Datei
    MsgBox(0, String($programme[$h]),String($programme[$h]))
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Taek (25. Juli 2008 um 12:58)

  • Hab mal kurz was zusammengeschrieben.

    Spoiler anzeigen
    [autoit]


    If Checked($checkbox) = 1 Then
    MsgBox(0, "", "Checkbox markiert")
    EndIf

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

    Func Checked($s_id)
    If GUICtrlRead($s_id) = $GUI_CHECKED Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]
  • Wie kann ich das "Checked" verstehen? Als Variable wohl nicht :huh:

    Hilft mir jetzt nicht direkt weiter...
    Es wär praktisch, wenn ich das in meinen "Switch... For... If..." Code einbauen könnte.

  • In dem Skript ist auch ein Beispiel. Du prüfst einfach mit "Checked" ob die Variable "$checkbox" markiert ist

  • Hab dein Skript jetzt mal geändert.

    Checkboxen aus Array erstellen

    Spoiler anzeigen
    [autoit]


    Local $id[1]
    $programme = _FileListToArray(@ScriptDir & "\Programme", "*", 2)
    _ArraySort($programme)
    For $x = 1 to $programme[0]
    Redim $id[UBound($id) + 1]
    $id[0] = $id[0] + 1
    $id[UBound($id) - 1] = GUICtrlCreateCheckbox($programme[$x], 10, (10 + ($x - 1) * 17), 140, 15)
    Next

    [/autoit]

    Abfrage

    Spoiler anzeigen
    [autoit]


    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_start
    For $h = 1 To UBound($id) - 1
    ;Wenn Markiert ...
    If GUICtrlRead($id[$h]) = $GUI_CHECKED Then
    ;Dann Messagebox mit Title = Checkboxname, Message=Datei
    MsgBox(0, "", $programme[$h])
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    Edit: Das mit Redim habe ich in der UDF "File.au3" bei _FileListTo Array gefunden

  • Ja das ist es :thumbup:
    Ich hab mir schon gedacht, dass ich mir ein 2. Array anlegen muss, aber nicht gewusst wie.
    Danke!

  • Ich hab am Anfang dein Skript nur überflogen und erst jetzt ist mir aufgefallen das da was nicht stimmt. Man kann die Programme und die IDs auch in einem Array speichern

    • Offizieller Beitrag

    Ich habe Deine Scriptfragmente mal verbessert:

    [autoit]


    $programme = _FileListToArray(@ScriptDir&"\Programme", "*", 2)
    _ArraySort($programme)
    Global $hCheckbox[$programme[0]+1] ; Array dimensionieren
    For $x = 1 to $programme[0]
    $hCheckbox[$x] = GUICtrlCreateCheckbox($programme[$x],10,10+($x-1)*(17),140,15) ; ControlID dem Array zuweisen
    Next

    [/autoit][autoit]


    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_start
    For $h = 1 To $programme[0]
    ;Wenn Markiert ...
    If BitAND(GUICtrlRead($hCheckbox[$h]), $GUI_CHECKED) Then
    ;Dann Messagebox mit Title = Checkboxname, Message=Datei
    MsgBox(0, String($programme[$h]),String($programme[$h]))
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]