For schleife anhand der vorhandenen Controls

  • Hi,

    ich war schon mal vor einigen Jahren hier Aktiv, habe aber meine Zugangsdaten nicht zur Hand.


    Ich habe das Problem, dass ich viel code habe der immer dasselbe macht, solang nicht das letzte Element erreicht ist.

    Code
    If GUICtrlRead($Input_dropdown_berater) = 1 Then
    If GUICtrlRead($Input_berater_1, $GUI_READ_EXTENDED) And GUICtrlRead($label_berater_1, $GUI_READ_EXTENDED) = '--Bitte wählen--' Then GUICtrlSetData($Input_berater_1, '---')
    $Beraterzusammen_zeile1 = $Beraterstart & GUICtrlRead($Input_berater_1, $GUI_READ_EXTENDED) & $Berateremail & GUICtrlRead($label_berater_1, $GUI_READ_EXTENDED) & $Beraterende
    GUICtrlSetData($Label1, $Beraterzusammen_zeile1)
    EndIf
    If GUICtrlRead($Input_dropdown_berater) = 2 Then
    If GUICtrlRead($Input_berater_1, $GUI_READ_EXTENDED) And GUICtrlRead($label_berater_1, $GUI_READ_EXTENDED) = '--Bitte wählen--' Then GUICtrlSetData($Input_berater_1, '---')
    $Beraterzusammen_zeile1 = $Beraterstart & GUICtrlRead($Input_berater_1, $GUI_READ_EXTENDED) & $Berateremail & GUICtrlRead($label_berater_1, $GUI_READ_EXTENDED) & $Beraterendezeile
    $Beraterzusammen_zeile2 = GUICtrlRead($Input_berater_2, $GUI_READ_EXTENDED) & $Berateremail & GUICtrlRead($label_berater_2, $GUI_READ_EXTENDED) & $Beraterende
    GUICtrlSetData($Label1, $Beraterzusammen_zeile1 & $Beraterzusammen_zeile2)

    Das geht teils bis zu 10 Mal nach oben.

    Ich habe aber auch Abhängigkeiten die rauf und runter gehen können. Somit wären das anhand der 10 genannten auch gerne mal 19 Durchläufe für ein Element.


    Was ich gerne hätte wäre etwas wie dieses hier, aber in funktionierend:

    Code
    For $i = 1 To GUICtrlRead($Input_dropdown_berater)
        $Beraterdaten = StringSplit(GUICtrlRead($Input_berater_[$i], $GUI_READ_EXTENDED), " ")
    GUICtrlSetData($Input_berater_[$i], $Beraterdaten[2] &", "& $Beraterdaten[1] )
    ; _ArrayDisplay($Beraterdaten)
    $Beraterdaten = ""
    Next


    Um es ein wenig Klarer zu machen.


    Ich würde gerne die Zahl in $Input_berater_1 gegen $i tauschen, da ich so schon mal ein paar hundert Zeilen Code sparen kann.


    Ich hoffe Ihr könnt helfen.

  • Ich würde gerne die Zahl in $Input_berater_1 gegen $i tauschen, da ich so schon mal ein paar hundert Zeilen Code sparen kann.

    Wenn du deine Variablen am Ende immer nummerierst solltest du vielleicht sie direkt in ein Array speichern.

    Also Local $berater[] = [ $berater1, $berater2, ... ]. Dann kannst du auch gemütlich über das Array laufen und dir den Code sparen.


    Der Zugriff erfolgt dann über $berater[0] ($berater1 in diesem Fall).

  • Meinem Verständnis nach bringt mir das aber auch keine Ersparnis bei der Menge der Codezeilen.

    Ich muss so erst abfragen welche Inputs Daten haben, die dann auslesen und an die Ausgabe schicken.

    Vielleicht scheint es dir ja nicht auf die schnelle ersichtlich zu sein, aber ich kann dir gerne weiter helfen.


    Am besten wird so etwas klar wenn du uns ein Beispielskript schreibst, das quasi die selbe Struktur wie dein jetziges Skript hat, mit den dutzenden von Code-Zeilen die du einsparen willst.

    Das rüsten wir dann mal auf die Arrayvariante um und es sollte dann hoffentlich etwas deutlicher werden.


    Bitte nicht dein jetziges Skript posten, das scheint sehr überladen zu sein, wenn ich mir die Zeilen so ansehe.

  • zur veranschaulichung und der einfachheit halber der ganze code. Teil 1

    Ich wüsste nicht was ich daraus entnehmen könnte ohne die Funktion zu brechen.

  • Teil 2

  • Also bei deinem Code steige ich auch nicht durch, ich bin mir aber zu 100% sicher, dass wenn du alles sorgfältig in Arrays verstaust auch am Ende deutlich weniger Zeilen unterm Strich hast.

    Du fragst z.B. ab welchen Wert das $Input_dropdown_berater Control hast und wiederholst die Anweisung dann dementsprechend für alle Variablen.


    Speichere alles in einem Array, und iteriere einfach von 0 bis zum ausgelesenen Wert, da kommst du auf das selbe hinaus.

    Genauso wie ich es dir anfänglich vorgeschlagen habe.