Checkboxen

  • Hi,

    jaja, ich hab die Suchfunktion benutzt, ich bin mir sicher dass es schon mehr als 1 Thread dazu gibt, aber ich finde auf die schnelle nix, ..., bzw. ich benutzte die falschen Begriffe.

    Also, wie kann ich feststellen welche von den 3 Checkboxen gecheckt sind, ohne 6 If...Then abfragen?

    Z.b. in dem Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 185, 82, 372, 349)
    $Checkbox1 = GUICtrlCreateCheckbox("1", 8, 8, 25, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("2", 8, 32, 25, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("3", 8, 56, 25, 17)
    $Button1 = GUICtrlCreateButton("OK", 48, 24, 129, 33)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ;... (Kein Plan, wie ich das ohne 6 if Abragen machen soll)
    EndSwitch
    WEnd

    [/autoit]

    Dankeschön :P

    Einmal editiert, zuletzt von anno2008 (6. Juli 2008 um 11:08)

    • Offizieller Beitrag

    Das auslesen geht so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 185, 82, 372, 349)
    $Checkbox1 = GUICtrlCreateCheckbox("1", 8, 8, 25, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("2", 8, 32, 25, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("3", 8, 56, 25, 17)
    $Button1 = GUICtrlCreateButton("OK", 48, 24, 129, 33)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Check = BitAnd(GUICtrlRead($Checkbox1), $GUI_CHECKED) * 1
    $Check += BitAnd(GUICtrlRead($Checkbox2), $GUI_CHECKED) * 2
    $Check += BitAnd(GUICtrlRead($Checkbox3), $GUI_CHECKED) * 4
    MsgBox(0, 'Test', $Check)
    EndSwitch
    WEnd

    [/autoit]

    $Check hat anschließend z.B. einen Wert von 7, wenn alle Checkboxen angehakt sind.

    • Offizieller Beitrag

    Hi,
    hier mal ein Bsp., wie du viiiele Checkboxen verwalten kannst. Ereignisse mußt du natürlich für jede CB einzeln festlegen, aber Erstellung und Abfrage Status kannst du in einer Schleife machen.

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB' & $i+1)
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB1()
    $Checked = BitXOR($Checked, $arCB[0][1])
    _ReadCB()
    EndFunc
    Func _ClickCB2()
    $Checked = BitXOR($Checked, $arCB[1][1])
    _ReadCB()
    EndFunc
    Func _ClickCB3()
    $Checked = BitXOR($Checked, $arCB[2][1])
    _ReadCB()
    EndFunc
    Func _ClickCB4()
    $Checked = BitXOR($Checked, $arCB[3][1])
    _ReadCB()
    EndFunc
    Func _ClickCB5()
    $Checked = BitXOR($Checked, $arCB[4][1])
    _ReadCB()
    EndFunc
    Func _ClickCB6()
    $Checked = BitXOR($Checked, $arCB[5][1])
    _ReadCB()
    EndFunc
    Func _ClickCB7()
    $Checked = BitXOR($Checked, $arCB[6][1])
    _ReadCB()
    EndFunc
    Func _ClickCB8()
    $Checked = BitXOR($Checked, $arCB[7][1])
    _ReadCB()
    EndFunc
    Func _ClickCB9()
    $Checked = BitXOR($Checked, $arCB[8][1])
    _ReadCB()
    EndFunc
    Func _ClickCB10()
    $Checked = BitXOR($Checked, $arCB[9][1])
    _ReadCB()
    EndFunc
    Func _ClickCB11()
    $Checked = BitXOR($Checked, $arCB[10][1])
    _ReadCB()
    EndFunc
    Func _ClickCB12()
    $Checked = BitXOR($Checked, $arCB[11][1])
    _ReadCB()
    EndFunc
    Func _ClickCB13()
    $Checked = BitXOR($Checked, $arCB[12][1])
    _ReadCB()
    EndFunc
    Func _ClickCB14()
    $Checked = BitXOR($Checked, $arCB[13][1])
    _ReadCB()
    EndFunc
    Func _ClickCB15()
    $Checked = BitXOR($Checked, $arCB[14][1])
    _ReadCB()
    EndFunc
    Func _ClickCB16()
    $Checked = BitXOR($Checked, $arCB[15][1])
    _ReadCB()
    EndFunc
    Func _ClickCB17()
    $Checked = BitXOR($Checked, $arCB[16][1])
    _ReadCB()
    EndFunc
    Func _ClickCB18()
    $Checked = BitXOR($Checked, $arCB[17][1])
    _ReadCB()
    EndFunc
    Func _ClickCB19()
    $Checked = BitXOR($Checked, $arCB[18][1])
    _ReadCB()
    EndFunc
    Func _ClickCB20()
    $Checked = BitXOR($Checked, $arCB[19][1])
    _ReadCB()
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hi,
    Dankeschön Oscar und BugFix für die Lösungen.
    Bis ich die Lösung von Bugfix kapiert hab, dauert noch ein bisschen und weils nur 3 Checkboxen sind, benutz ich glaub ich Oscars Lösung ;) .

    Aber trotzdem danke, werds mir anschauen :) .