Buttons im GUIOnEvent-Mode ansprechen

  • Hi,
    wie kann ich Controls im GUIOnEvent-Mode ansprechen, die dynamisch erstellt werden.

    Das folgendes Skript ist im GUIGetMsg-Mode erstellt.
    Es geht um die Buttons die in der Schleife erstellt werden.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    ;~ Opt("GUIOnEventMode", 1)

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

    Dim $buttons[11]

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

    GUICreate("Test", 100, 400)

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

    For $i = 1 To 10
    $buttons[$i] = GUICtrlCreateButton("Button " & $i, 10, 10 + $i * 30)
    Next

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

    GUISetState()

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

    ;~ GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    _beenden()
    EndSelect

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

    ;Wie muß dieser Teil im GUIOnEvent-Mode lauten???
    ;????????????????????????
    For $i = 1 To UBound($buttons) - 1
    If $msg = $buttons[$i] Then MsgBox(0, 0, "Button " & $i & " wurde gedrückt")
    Next
    ;????????????????????????

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

    Sleep(10)
    WEnd

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

    Func _beenden()
    Exit
    EndFunc ;==>_beenden

    [/autoit]
  • Für den GUIOnEvent-Mode benötigst du Funktionen, die von den Buttons angesprochen werden, wenn sie betätigt werden.

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Dim $buttons[11]

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

    GUICreate("Test", 100, 400)

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

    For $i = 1 To 10
    $buttons[$i] = GUICtrlCreateButton("Button " & $i, 10, 10 + $i * 30)
    GUICtrlSetOnEvent($buttons[$i], "B" & $i)
    Next

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

    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")

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

    While 1
    Sleep(10)
    WEnd

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

    Func B1()
    MsgBox(0, "Test", "Button1")
    EndFunc

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

    Func B2()
    MsgBox(0, "Test", "Button2")
    EndFunc

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

    Func B3()
    MsgBox(0, "Test", "Button3")
    EndFunc

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

    Func B4()
    MsgBox(0, "Test", "Button4")
    EndFunc

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

    Func B5()
    MsgBox(0, "Test", "Button5")
    EndFunc

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

    Func B6()
    MsgBox(0, "Test", "Button6")
    EndFunc

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

    Func B7()
    MsgBox(0, "Test", "Button7")
    EndFunc

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

    Func B8()
    MsgBox(0, "Test", "Button8")
    EndFunc

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

    Func B9()
    MsgBox(0, "Test", "Button9")
    EndFunc

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

    Func B10()
    MsgBox(0, "Test", "Button10")
    EndFunc

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

    Func _beenden()
    Exit
    EndFunc ;==>_beenden

    [/autoit]

    Dies war meine erste Idee, vielleicht gibt es elegantere Lösungen!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (27. August 2011 um 18:37)

  • oder einfacher so:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Dim $buttons[11]

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

    GUICreate("Test", 100, 400)

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

    For $i = 1 To 10
    $buttons[$i] = GUICtrlCreateButton("Button " & $i, 10, 10 + $i * 30)
    GUICtrlSetOnEvent($buttons[$i], "Button")
    Next

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

    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")

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

    While 1
    Sleep(10)
    WEnd

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

    Func Button()
    MsgBox(0, '', 'Button ' & @GUI_CtrlId - $buttons[1] +1 & ' gedrückt')
    EndFunc

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

    Func _beenden()
    Exit
    EndFunc ;==>_beenden

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...