Bei mehreren Checkboxen nur eine auswählbar machen

  • Guten Abend,
    ich habe mehrere Checkboxen (18stk) die so erstellt werden.


    [autoit]

    Global $checkboxen[18]$Global $vTop = 10
    For $i = 0 To 17
    $checkboxen[$i] = GUICtrlCreateCheckbox("Checkbox: " & $i, 10, $vTop, 32, 13)
    $vTop = $vTop + 17Next

    [/autoit]

    Nun möchte ich aber gerne das nur eine Checkbox ausgewählt werden kann. Wenn eine 2 Checkbox angeklickt wird soll die erste wieder auf $GUI_UNCHECKED gesetzt werden. Mir kommt gerade nicht in den sinn wie ich das lösen könnte.
    Grüße.

  • Zuerst hatte ich ja vor ListView zu nehmen, aber da ist es mit dem auslesen/ändern/löschen von werten sowas von kompliziert.

    Radiobuttons würden auf jeden Fall auch gehen :)

    Das ganze schaut jetzt so aus

    [autoit]

    For $i = 0 To 17
    $RB_PLAYER[$i] = GUICtrlCreateRadio("", 419, $vTop, 13, 13)
    GUICheckBoxSetColor($RB_PLAYER[$i], 0x000000, $GUI_BKCOLOR_TRANSPARENT)
    $vTop = $vTop + 17
    Next
    $vTop = $iPosTop + 13
    For $i = 0 To 17
    $LB_PLAYER[$i] = GUICtrlCreateLabel($i & ":", 435, $vTop, 16, 13)
    GUICtrlSetBkColor($LB_PLAYER[$i], $GUI_BKCOLOR_TRANSPARENT) ;UDF, weil ich einen *.jpg GUI background verwende
    $vTop = $vTop + 17
    Next

    [/autoit]

    Einmal editiert, zuletzt von juloko1 (3. September 2012 um 21:58)

  • Heyho Leute, schau dir doch mal

    [autoit]

    Case $install_use_accept
    If GUICtrlRead ($install_use_accept) == $GUI_CHECKED Then
    GUICtrlSetState ($button_next, $GUI_ENABLE)
    GUICtrlSetState ($install_use_notaccept, $GUI_DISABLE)
    ElseIf GUICtrlRead ($install_use_accept) == $GUI_UNCHECKED Then
    GUICtrlSetState ($button_next, $GUI_DISABLE)
    GUICtrlSetState ($install_use_notaccept, $GUI_ENABLE)
    EndIf
    Case $install_use_notaccept
    If GUICtrlRead ($install_use_notaccept) == $GUI_CHECKED Then
    GUICtrlSetState ($install_use_accept, $GUI_DISABLE)
    ElseIf GUICtrlRead ($install_use_notaccept) == $GUI_UNCHECKED Then
    GUICtrlSetState ($install_use_accept, $GUI_ENABLE)
    EndIf

    [/autoit]


    an. Das ist wirklich simpel und funktioniert IMMER. Hoffe dies ist die Lösung für dein problem.

  • Hi, zwei Schleifen sind nicht nötig.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $RB_PLAYER[18], $LB_PLAYER[18]
    ;Global $vTop = 10 ;, $iPosTop

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

    GUICreate("", 700, 430)
    For $i = 0 To 17
    $RB_PLAYER[$i] = GUICtrlCreateRadio("", 419, 10 + $i * 20, 13, 13)
    $LB_PLAYER[$i] = GUICtrlCreateLabel($i+1 & ":", 435, 10 + $i * 20, 16, 13)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    ;~ $vTop = $vTop + 17
    Next
    ;~ $vTop = $iPosTop + 13

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd
    ; Ende

    [/autoit]
    • Offizieller Beitrag

    @Sol.LrMartyn 
    Deine Lösung ist NICHT empfehlenswert!

    Ich habe das schon so oft wiedergekäut, wiederhole es aber gern nochmal:
    Radios oder Checkboxen können mehr als den Status CHECKED od. UNCHECKED haben. Insofern ist die Abfrage If Ctrl = Status schlichtweg falsch, da sie zu fehlerhaften Ergebnissen führen kann. (Nebenbei ist der Vergleich mit == kompletter Blödsinn. Das ist ausschließlich für Case sensitiven Stringvergleich)

    Eine korrekte Abfrage prüft ob der gesuchte Status Bestandteil des gesamten Status ist. Dazu verwendet man BitAnd

    [autoit]

    If BitAnd(GuiCtrlRead($Ctrl), $GUI_CHECKED) Then

    [/autoit]