Dynamisch erstellte Controls und While GuiGetMsg()

  • Hallo

    Im Zuge eines Programmupdates bin ich gezwungen, das bisher verwendete GUI abzuändern.

    Es handelt sich nun um 2 GUIs (1 Parent, 1 Child) und das Child-GUI ist jetzt scrollbar, weil darin eine unbekannte Anzahl

    an Buttons erstellt werden. ... das ist so nicht ganz richtig. ich bekomme die nötige Anzahl aus einer INI. Je nachdem welche

    Sektion gelesen wird entscheidet dann die Anzahl an Keys die Anzahl der zu erstellenden Buttons.

    Es können also 3 oder auch 78 sein...

    Die Darstellung (Scrollbalken sind nur dann sichtbar, wenn es wirklich nötig ist) und das

    Scrollen funktionieren nun mittlerweile prima.

    Nun zur aktuellen Problematik:

    Die Buttons, die ich im Child-GUI erstelle baue ich via For-Next-Schleife in einem Array

    $hBtnRechts[$i] = GUICtrlCreateButton(bla bla)

    Ich tue mich grad extrem schwer damit, die While WEnd Schleife aufzubauen, sodass ich die dynamischen Buttons ansprechen kann.

    Kann mir da mal jemand unter die Arme greifen??

    Wenn ihr das Script testet und auf einen der Buttons aus der rechten Seite klickt, sollte eine msgbox aufploppen.

    Ich kriegs nicht hin...

    _________________________

    Nachtrag::

    Das lauffähige Beispiel stürzt aktuell ab, wenn ein anderer Button als "Schicht A" geklickt wird! Das liegt am Versuch, die dyn. Buttons anzusprechen.

    Codezeilen 102 - 105

    Nachtrag 2::

    Code formatiert

    GuiScroll.au3 falls ihr diese nicht habt
    Das lauffähige Beispiel
  • Poste doch bitte beim nächsten Mal in Code-Tags, da ansonsten überall doppelte Zeilenumbrüche vorkommen und man das Skript nicht einfach in SciTE reinkopieren kann.

    Ich tue mich grad extrem schwer damit, die While WEnd Schleife aufzubauen, sodass ich die dynamischen Buttons ansprechen kann.

    Kann mir da mal jemand unter die Arme greifen??

    Grundsätzlich solltest du wissen, dass AutoIt ganze positive Zahlen verwendet um die Controls zu referenzieren.

    D.h. wenn du 100 Buttons hintereinander erzeugst, dann sind diese alle durchnummeriert.

    Es genügt im Switch-Case einfach To zu verwenden. Bspw: Case $aButtons[0] To $aButtons[UBound($aButtons) - 1] und der Fall wird immer auslösen, wenn du auf die Buttons klickst.

    Wichtig ist, dass du dazwischen keine anderen Controls erzeugst, da die Reihenfolge sonst nicht mehr stimmt.

    Alternativ kannst du auch auf den OnEventMode wechseln und für jeden Button die selbe Funktion registrieren und anschließend @GUI_CtrlId switch-casen wie bei deiner MsgLoop.

  • Lottich 27. September 2019 um 19:55

    Hat das Label von [ offen ] auf [ gelöst ] geändert.
  • Hatte das gleiche auch mal, dass ich eine Anzahl von Buttons anhand einer Textdatei erstellen wollte und die Buttonnamen aus der jeweiligen Zeile ausgelsen hatte.

    Hab es mit GuiCtrlSetOnEvent gemacht und den Buttons eine Funktion zugewiesen.

    Gruß