Innerhalb einer GUI überprüfen welcher Button gedrückt ist?

  • Hallo zusammen,
    ich arbeite derzeit etwas an einer GUI und frage mich, wie man etwas "schöner" programmiert.
    Mal als Beispiel: Ich habe etwa 25 Buttons (die alle mehr oder weniger die selbe Funktion aufrufen nur mit anderen Parametern)
    und anstatt eben jetzt 25 Switch-Case Anweisungen zu schreiben wollte ich das in einer packen.

    Hier mal mein Lösungsvorschlag

    [autoit]

    For $i = 0 To 5 Switch $nMsg[0] Case $north_shara[$i]
    MsgBox(0,"You clicked","Button: " & GuiCtrlRead($north_shara[$i]))

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

    EndSwitch Next

    [/autoit]

    (tut mir leid für diese schreckliche Formatierung, wBB scheint nicht zu wollen wie ich will)

    Es klappt auch soweit, was mich jedoch stört ist die Tatsache dass er permanent in dieser For-Schleife bleibt.
    Gibt es keinen einfacheren Weg o.O?

    Edit: gelöst gesetzt

    Einmal editiert, zuletzt von draien (3. September 2014 um 21:35)

  • Um Quellcode einzufügen, benutze bitte den Quellcode-Tab im Editor, da der Text sonst im Forum nicht richtig dargestellt wird:
    [Blockierte Grafik: http://i.imgur.com/0Ad5mrS.png;)

    Dein Problem lässt sich leicht lösen. Ein Case-Statement kann das Schlüsselwort To enthalten. Die Verwendung kannst du aus diesem kleinen Beispiel ableiten:

    Spoiler anzeigen
    [autoit]


    $hWnd = GUICreate("myGUI", 600, 400)
    GUISetFont(48)
    $cButton1 = GUICtrlCreateButton("1", 0, 0, 600, 133)
    $cButton2 = GUICtrlCreateButton("2", 0, 133, 600, 133)
    $cButton3 = GUICtrlCreateButton("3", 0, 266, 600, 133)
    GUISetState()

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

    While True
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cButton1 To $cButton3
    MsgBox(64, "myGUI", "Button Nummer " & GUICtrlRead($nMsg) & " wurde gedrückt!")
    EndSwitch
    WEnd

    [/autoit]

    Gruß