Dynamische Button bedienen

  • Jeweils nach vorhandenen CD-Laufwerken, werden Label und Button dynamisch bis zu 4 Stück erstellt.Die Gestaltung der Buttonprozedur bereitet mir Probleme und ich komme nicht weiter.
    Deshalb meine Frage an Euch, ob Ihr einen Rat oder Lösung habt ?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $lbLW[5], $bnOpen[5], $bnClose[5]
    Global $CDROM = DriveGetDrive("CDROM")

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

    $GUI = GUICreate("CD - Tray Manager", 300, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_quit")
    GUICtrlCreateLabel("CD - Tray Manager", 10, 10, 280, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 10, 400, 0, "Comic Sans MS")

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

    For $i = 1 To $CDROM[0]
    $lbLW[$i] = GUICtrlCreateLabel("CD-Rom - Laufwerk " & $CDROM[$i], 10, 10 + $i * 32, 180, 22)
    $bnOpen[$i] = GUICtrlCreateButton("Open", 200, 10 + $i * 32, 40, 22)
    $bnClose[$i] = GUICtrlCreateButton("Close", 250, 10 + $i * 32, 40, 22)

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

    ; $bnOpen[$i] CDTray($CDROM[$i], "open")
    ; $bnClose[$i] CDTray($CDROM[$i], "close")
    Next

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

    $bnCancel = GUICtrlCreateButton("Cancel", 215, 168, 75, 22)
    GUICtrlSetOnEvent(-1, "_quit")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _quit()
    Exit
    EndFunc ;==>_quit

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

    ; Ende

    [/autoit]


    Danke ;)

    • Offizieller Beitrag

    Meines Erachtens reicht es völlig, wenn du ein Array für alle Button verwendest.
    Weise allen Button beim Erstellen dasselbe Event zu. Auswertung wie folgt:

    [autoit]

    For $i = 0 To UBound($aButton) -1
    $aButton[$i] = GUICtrlCreateButton(...)
    GUICtrlSetOnEvent(-1, '_btnClick')
    Next

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

    Func _btnClick()
    Switch @GUI_CtrlId
    Case $aButton[0]
    ; Code
    Case $aButton[1]
    ; ...
    EndSwitch
    EndFunc

    [/autoit]
  • Danke an BugFix und Oscar für die Unterstützung.
    Das Ergebnis liegt im Spoiler. ;)

    Spoiler anzeigen
    [autoit]


    ; by Ritzelrocker04
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $lbLW[5], $bnOpen[5], $bnClose[5]
    Global $CDROM = DriveGetDrive("CDROM")

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

    $GUI = GUICreate("CD - Tray Manager", 300, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_quit")
    GUICtrlCreateLabel("CD - Tray Manager", 10, 10, 280, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 10, 400, 0, "Comic Sans MS")

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

    For $i = 1 To $CDROM[0]
    $lbLW[$i] = GUICtrlCreateLabel("CD-Rom - Laufwerk " & $CDROM[$i], 10, 10 + $i * 32, 180, 22)
    $bnOpen[$i] = GUICtrlCreateButton("Open", 200, 10 + $i * 32, 40, 22)
    GUICtrlSetOnEvent(-1, '_LWopenclose')
    $bnClose[$i] = GUICtrlCreateButton("Close", 250, 10 + $i * 32, 40, 22)
    GUICtrlSetOnEvent(-1, '_LWopenclose')
    Next

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

    $bnCancel = GUICtrlCreateButton("Cancel", 215, 168, 75, 22)
    GUICtrlSetOnEvent(-1, "_quit")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _LWopenclose()
    Local $msg = @GUI_CtrlId
    For $i = 1 To $CDROM[0]
    If $msg = $bnOpen[$i] Then
    CDTray($CDROM[$i], 'open')
    ExitLoop
    EndIf
    If $msg = $bnClose[$i] Then
    CDTray($CDROM[$i], 'closed')
    ExitLoop
    EndIf
    Next
    EndFunc ;==>_LWopenclose by Oscar

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

    Func _quit()
    MsgBox(64, " CD - Tray Manager", "Viel Spaß wünscht Ritzelrocker04 !" & @TAB)
    Exit
    EndFunc ;==>_quit

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

    ; Ende

    [/autoit]