Probleme mit Variabler GUI

  • Hi,

    ich schreibe im moment ein Programm dessen GUI variable Buttons hatt. D.h. ein User will 4 Buttons und der andere 5 oder so ähnlich.

    Die Buttons bekomm ich auch in die GUI rein. Sie gehen auch. Aber ich kann die Befehle nicht in der GUIGetMsg() Schleife verwenden da ich nicht weiß ich diese Variable gestallte.

    Ich hoffe Ihr habt ne Idee.

    Gruß Michi26206
    PS: Ich hoffe ihr habt es verstanden. Ich kann das bissle shclecht erklären ;)

    So erstell ich die Buttons:

    Spoiler anzeigen
    [autoit]


    For $i = 1 to $Button[0]
    $hoehe_buttons = $i * 50 + 20
    $Button_klickbar[$i] = GUICtrlCreateButton("Button", 15, $hoehe_buttons, 100, 25, $BS_ICON)
    Next

    [/autoit]
    • Offizieller Beitrag

    Sollen die Buttons vordefiniert sein und nur Dynamisch angezeigt werden?

  • Ja, die Buttons heißen dann z.B. Button 1, Button 2 etc. Allerdings kann es vorkommen das wie oben erwähnt bei einem User nur 4 Buttons erschienen und bei andern User 9.

    Gruß Michi26206

    • Offizieller Beitrag

    Mein Vorschlag :

    Array für die Buttons definiern am besten am Scriptanfang (Beispiel $Buttons) :

    [autoit]

    Dim $Buttons[4]

    [/autoit]

    In der GUIGetMag abfrage einfach jeden Button mit einbauen.

    [autoit]

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $Buttons[0]
    ;hier kommen deine Aweisungen für Button[0] rein
    Case $msg = $Buttons[1]
    ;hier kommen deine Aweisungen für Button[1] rein
    Case $msg = $Buttons[2]
    ;hier kommen deine Aweisungen für Button[2] rein
    Case $msg = $Buttons[3]
    ;hier kommen deine Aweisungen für Button[3] rein
    Case $msg = $Buttons[4]
    ;hier kommen deine Aweisungen für Button[4] rein
    EndSelect
    WEnd

    [/autoit]

    Dadurch, das du $Buttons als Array definiert hast kann es bei der Abfrage nicht zu Fehlern kommen auch wenn noch nicht die Buttonzahl bei Scriptstart festliegt.

  • Hi,
    meinst du sowas in der Art?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Buttonarray = 0

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

    $Form1 = GUICreate("Test", 141, 447, 283, 174)
    $Input1 = GUICtrlCreateInput("", 8, 32, 121, 21)
    $Label1 = GUICtrlCreateLabel("Anzahl Buttons", 32, 8, 75, 17)
    $Button1 = GUICtrlCreateButton("Button1", 8, 64, 123, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If GUICtrlRead($Input1) <> '' Then
    Dim $Buttonarray[GUICtrlRead($Input1)]

    For $i = 0 To GUICtrlRead($Input1) - 1
    $Buttonarray[$i] = GUICtrlCreateButton("Button " & $i + 1, 8, (64 * $i / 2) + 8, 123, 25, 0)
    Next

    GUICtrlDelete($Button1)
    GUICtrlDelete($Input1)
    GUICtrlDelete($Label1)
    Else
    MsgBox(48, "Error", "Keine Button-Zahl angegeben!")
    EndIf
    EndSwitch

    If IsArray($Buttonarray) Then
    For $j = 0 To UBound($Buttonarray) - 1
    If $nMsg = $Buttonarray[$j] Then MsgBox(0, "", "Button " & $j + 1 & " wurde gedrückt!")
    Next
    EndIf
    WEnd

    [/autoit]
  • Hi,

    danke an beide.

    @ Raupi: Deins hat leider nicht geklappt weil ich noch nen zusätzlichen Array hatte und ich den nicht auf eine bestimmte Größe erweitern konnte.

    @ anno2008: So was in der Art meinte ich nicht aber ich konnte das hier:

    Spoiler anzeigen
    [autoit]

    If IsArray($Buttonarray) Then
    For $j = 0 To UBound($Buttonarray) - 1
    If $nMsg = $Buttonarray[$j] Then MsgBox(0, "", "Button " & $j + 1 & " wurde gedrückt!")
    Next
    EndIf

    [/autoit]


    verwenden.

    Jetzt geht es.
    Danke @ all