Daten aus Arrray in Control schreiben

  • Hallo,

    welche Befehle benötige ich um Daten (die ich mit einer For-Next Schleife aus einem Array auslese) nacheinander in verschiedene Controls einzufügen?
    Hab pro Schleifendurchlauf 6 Werte die in verschiedene Controls sollen.
    Dies ist immer noch mein erstes Autoit-Programm. :(

  • Bei einer For-Schleife hast du eine Laufvariable welche einen StartWert erhält und welche dann meistens bis zu einem Endwert erhöht wird.
    Was in dieser Schleife stattfindet muss demnach idealerweise irgendwo durch diese Laufvariable ausgedrückt werden.

    Wenn du ein Control einen Text zuweisen willst benötigst du die Control-ID des Controls.
    Um dann alle Controls durchlaufen zu lassen macht es nun Sinn die Variablen welche die entsprechenden Control-ID´s enthalten durchzunummerieren damit man die Nummer in der Schleife dann durch die Laufvariable ersetzen kann.
    Heißen deine Controls dann $Input1-$Input6 kannst du die letzte Zahl dann einfach durch die Laufvariable ersetzen und damit alle Controls in einer For-Schleife durchlaufen.
    Damit man auch die ControlID dieser Variable bekommt muss man bei AutoIt einen kleinen Umweg über die Funktion Eval() machen da man so nicht einfach z.B. $Input$i schreiben kann.

    Mal als kleines Beispielskript (ich gebe zu - selbst die Erstellung der Controls hätte man sogar schon in eine For-Schleife packen können...):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("", 120, 200)
    $Input1 = GUICtrlCreateInput("", 16, 16, 81, 21)
    $Input2 = GUICtrlCreateInput("", 16, 40, 81, 21)
    $Input3 = GUICtrlCreateInput("", 16, 66, 81, 21)
    $Input4 = GUICtrlCreateInput("", 16, 92, 81, 21)
    $Input5 = GUICtrlCreateInput("", 16, 116, 81, 21)
    $Input6 = GUICtrlCreateInput("", 16, 140, 81, 21)
    $Button = GUICtrlCreateButton("Start", 30, 170, 50, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()

    Case $Button

    For $i = 1 To 6
    GUICtrlSetData(Eval("Input" & $i), "Wert " & $i)
    Next

    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Hi!

    AspirinJunkie:
    Man sollte denke ich Eval vermeiden, wann immer möglich, also die IDs in einem Array speichern - macht den Code in meinen Augen auch etwas übersichtlicher:

    [autoit]

    #include <GUIConstants.au3>

    Global $Inputs[7]
    $Form1 = GUICreate("", 120, 200)
    $Inputs[1] = GUICtrlCreateInput("", 16, 16, 81, 21)
    $Inputs[2] = GUICtrlCreateInput("", 16, 40, 81, 21)
    $Inputs[3] = GUICtrlCreateInput("", 16, 66, 81, 21)
    $Inputs[4] = GUICtrlCreateInput("", 16, 92, 81, 21)
    $Inputs[5] = GUICtrlCreateInput("", 16, 116, 81, 21)
    $Inputs[6] = GUICtrlCreateInput("", 16, 140, 81, 21)
    $Button = GUICtrlCreateButton("Start", 30, 170, 50, 21)
    GUISetState(@SW_SHOW)

    While 1
    Switch GUIGetMsg()

    Case $Button

    For $i = 1 To 6
    GUICtrlSetData($Inputs[$i], "Wert " & $i)
    Next

    Case $GUI_EVENT_CLOSE
    Exit

    EndSwitch
    WEnd

    [/autoit]

    @Threadstarter:
    Solltest du dich auf andere Programme bezogen haben, sollte eine For-Schleife mit mehrereren ControlSetText darin reichen...

    peethebee

  • Hey Pee - die Methode kannte ich noch nicht - find ich aber auch wirklich deutlich cleverer.

    Hätte man auch selbst drauf kommen können... :rolleyes:

    Zumindestens müsstest du aber noch vorher das Array mit der entsprechenden Dimension deklarieren - sonst gibts ne Fehlermeldung... ;)