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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)