Ereignisse von dynamisch erzeugten Gui-Elementen verarbeiten

  • Hallo,

    habe eine Gui, auf der ich dynamisch eine Gruppe von Radio-Buttons anlege

    [autoit]


    For $z = 1 to $i
    $ahdlRadio[$z - 1] = GUICtrlCreateRadio($aRadio[$z - 1], 15, 60 + 30 * $z, 340, 20)
    Next

    [/autoit]

    Wie kann ich jetzt bei der Auswahl eines Radiobuttons ein Ereignis zuordnen?
    Testweise habe ich es mal so versucht, aber es passiert nichts:

    [autoit]


    While 1
    $msg = GUIGetMsg()
    For $z = 1 to $i
    If $ahdlRadio[$z - 1] = $msg Then
    MsgBox(0,"hallo","")
    EndIf
    Next
    WEnd

    [/autoit]

    Danke schon mal im Voraus für Eure Anregungen.
    Gruß,
    Don

    Einmal editiert, zuletzt von Don (29. Juli 2010 um 09:42)

  • Hey

    Wenn du dir For schleifen von 0 an laufen lässt brauchst du nacher nciht jedes mal 1 abziehen aber so kannst du prüfen ob die checkbox markiert oder eben nicht ist

    Spoiler anzeigen
    [autoit]

    While 1
    For $z = 0 to $i ;einfach von 0 an laufen lassen
    If GUICtrlRead($ahdlRadio[$z]) = $GUI_CHECKED Then ; wahlweise auch $GUI_UNCHECKED
    MsgBox(0,"hallo","")
    EndIf
    Next
    WEnd

    [/autoit]


    EDIT: auch sowas würde funktionieren:

    Spoiler anzeigen
    [autoit]


    While 1
    For $z = 0 to $i
    Switch GUICtrlRead($ahdlRadio[$z])
    Case $GUI_CHECKED
    MsgBox(0,"hallo","CHECKED")
    Case $GUI_UNCHECKED
    MsgBox(0,"hallo","UNCHECKED")
    EndSwitch
    Next
    WEnd

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (28. Juli 2010 um 16:07)

  • Hallo Darter,
    Danke für die schnelle Antwort.
    Nun bekomme ich das Ereignis :D , aber .. ich lande in einer Endlosschleife ;( , da der selektierte Radiobutton nun endlos prozessiert wird. Mein Wunsch wäre das Ereignis nur einmal zu prozessieren.
    Noch ne Idee?
    Gruß,

  • Hey

    Wenn du den Status der Boxen nur einmalig überpüfen willst, dann musst du einfach endlosschleife While 1 weglassen.

    mfg Darter

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    • Offizieller Beitrag

    Hier ein altes Bsp. von mir:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $arRadio[10], $str

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

    $gui = GUICreate('test', 500, 400)
    GUICtrlCreateGroup('', 10, 10, 400, 60)
    $arRadio[0] = GUICtrlCreateRadio('Radio 1', 20, 20, 70)
    $arRadio[1] = GUICtrlCreateRadio('Radio 2', 20, 45, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 80, 400, 60)
    $arRadio[2] = GUICtrlCreateRadio('Radio 3', 20, 90, 70)
    $arRadio[3] = GUICtrlCreateRadio('Radio 4', 20, 115, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 150, 400, 60)
    $arRadio[4] = GUICtrlCreateRadio('Radio 5', 20, 160, 70)
    $arRadio[5] = GUICtrlCreateRadio('Radio 6', 20, 185, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 220, 400, 60)
    $arRadio[6] = GUICtrlCreateRadio('Radio 7', 20, 230, 70)
    $arRadio[7] = GUICtrlCreateRadio('Radio 8', 20, 255, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup('', 10, 290, 400, 60)
    $arRadio[8] = GUICtrlCreateRadio('Radio 9', 20, 300, 70)
    $arRadio[9] = GUICtrlCreateRadio('Radio 10', 20, 325, 70)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    For $i = 0 To UBound($arRadio) -2 Step 2
    GUICtrlSetState($arRadio[$i], $GUI_CHECKED)
    Next
    $bCheck = GUICtrlCreateButton('Check', 10, 370, 60, 20)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    If $msg = $bCheck Then
    $str = ''
    For $i = 0 To UBound($arRadio) -1
    If BitAND(GUICtrlRead($arRadio[$i]), $GUI_CHECKED) Then
    $str &= ControlGetText("", "", $arRadio[$i]) & @LF
    EndIf
    Next
    MsgBox(0, '', 'Markiert sind: ' & @LF & $str )
    EndIf
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Edit:
    Hatte mich vertan, du wolltest ja Checkboxen - dann dieses:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Global $gui, $aCB[10]
    Local $y = 20

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

    $gui = GUICreate('Test')
    GUISetOnEvent(-3, '_ende')
    GUICtrlCreateGroup('', 10, 5, 100, 220)
    For $i = 0 To UBound($aCB) -1
    $aCB[$i] = GUICtrlCreateCheckbox('CheckBox '&$i+1, 20, $y, 70)
    GUICtrlSetOnEvent(-1, '_CBClick')
    $y += 20
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    Func _CBClick()
    For $i = 0 To UBound($aCB) -1
    If @GUI_CtrlId = $aCB[$i] Then
    If BitAND(GUICtrlRead($aCB[$i]), $GUI_CHECKED) Then
    MsgBox(0, ControlGetText($gui, '', $aCB[$i]), 'CB Checked')
    Else
    MsgBox(0, ControlGetText($gui, '', $aCB[$i]), 'CB Not Checked')
    EndIf
    ExitLoop
    EndIf
    Next
    EndFunc

    [/autoit]