ComboBox dynamisch erweitern und abfragen

  • Hallo zusammen,

    ich suche einen Weg, eine ComboBox mit z.B. 4 festen Werten um einen weiteren 5. Wert zu erweitern.

    Problem:

    • Der Wert wird erst eingetragen, nachdem die Anwendung gestartet ist.
    • Der Wert muss wärend der Ausführung ausgelesen und verarbeitet werden
    • Der Wert muss danach nicht gespeichert werden

    Ich habe als Beispiel mal den Code aus der Hilfe etwas umgeschrieben.

    ComboBox Code

    Wenn ich jetzt zur Laufzeit das Wort "Platzhalter" durch z.B. "Wert 5" ersetze, wird mir aber nie "Wert 5" angezeigt.

    Was muss ich hier genau anpassen?

    Vielen Dank

    • Offizieller Beitrag

    Hier mal nur als Bsp., wie es funktioniert. Das Drumherum kannst du dann anpassen:

  • Hallo BugFix,

    jetzt kommen wir der Sache näher. Danke schon mal. Stell Dir jetzt aber statt dem Text "Neuen Eintrag speichern" den Text "DB abfragen" vor.

    Wenn ich aktuell den Wert ausgeben via

    Code
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $cAdd
                $sCombo &= "|" & GUICtrlRead($cCombo)
                MsgBox(1,"ComboAusgabe", $sCombo)
    ;~             GUICtrlSetData($cCombo, "|" & $sCombo)
        EndSwitch
    WEnd

    dann sieht das ja untergefähr so aus:

    Code
    Val_1|Val_2|Val_3|Val_4|Mein eigener Wert

    Die DB sollte aber gleich mit "Mein eigener Wert" los legen (oder eben mit Va_1 usw.). Es muss praktisch mit einem Klick der Wert ausgelesen, selektiert und verarbeitet werden.

  • Meinst du das etwa so...

  • Hallo Bitnugger,

    erst mal vielen Dank für den Code. Sieht für mich nicht einfach aus. Leider muss ich Dir sagen, dass das komplett am Thema vorbei ging. Ich versuche meine Anwendung mal zu beschreiben. Das was die Anwendung macht, geschieht normal durch ca. 18 Mausklicks in einem Browser. Ich habe das vor Jahren dann so angefangen, das ich einen Wert in eine Inputbox kopiere und dann noch einen Button drücke. Danach musst ich es erweitern um eine Checkbox (für Kunde A). Kurze Zeit Später kam die 2. Checkbox dazu (für Kunde B). Das hat jetzt in Summe 4 Checkboxen. Alle 4 Kunden sind von den Werten her fix definiert, da Sie oft benötigt werden. Ich habe dann noch eine Inputbox hinzugefügt, wo ich sozusagen viel 5. Kunden abbilden kann, indem ich den Wert - nach dem Starten der Anwendung - individuell eintragen kann. Da funktioniert auch alles. Jetzt würde ich gerne die 4 Checkboxen und das Inputfeld verwerfen und dafür eine ComboBox nutzen.

    Die Positionen 2 bis 5 in der Combox (also wenn ich die öffne und man die Werte sieht), sollen meine Kunden A bis D abbilden (also fix sein). Die Position 1 (also der Wert der ComboBox, den man sieht, wenn man die ComboBox nicht aufklappt), soll als InputBox dienen. Sprich ich trage da was ein, dann klicke ich auf meinen Button und eine Aktion XYZ muss dann irgendwie die Position 1 der ComboBox auslesen (oder eben Position 2 bis 5, falls ich einen fixen Wert aus der ComboBox wähle) und verarbeiten.

    Der Variable Wert muss überhaupt nicht fest verdrahtet werden. Der wird wirklich nur zum Zeitpunkt der Ausführung benötigt.

    Trotz allem vielen Dank euch allen für eure Bemühungen.

  • Code4Fun 26. März 2019 um 08:56

    Hat das Label [ offen ] hinzugefügt.
  • Leider muss ich Dir sagen, dass das komplett am Thema vorbei ging.

    Was genau ging komplett am Thema vorbei? Habe deinen Text gelesen und vermute mal, dass dir nicht ganz klar ist, wie eine ComboBox funktioniert.

    Die Position 1 (also der Wert der ComboBox, den man sieht, wenn man die ComboBox nicht aufklappt), soll als InputBox dienen.

    Der Satz ergibt so keinen Sinn... denn der Wert den du siehst, wenn die ComboBox nicht aufgeklappt ist, ist nicht zwingend der, der an Position 1 steht und "Die Position 1" kann nicht als InputBox dienen. Oder meinst du damit, dass nur dann eine Eingabe in das Input-Feld der ComboBox erlaubt sein soll, wenn der Wert, der an Position 1 steht, angezeigt wird, um einen Kunden hizuzufügen?

    Mit dem Script von mir kannst du neue Einträge hinzufügen oder bestehende löschen.

    Hinzufügen: Einen nicht vorhanden Namen in das Input-Feld der ComboBox (vorher evtl. leeren) eingeben, dann auf den Plus-Button drücken.

    Entfernen: Einen Namen aus der aufgeklappten Liste der ComboBox auswählen, dann auf den Minus-Button drücken. Der Eintrag an Position 1 (Platzhalter) kann nicht gelöscht werden.

    Es fehlt noch die Möglichkeit bestehende Einträge zu ändern. Dazu müsste die Nachricht $EN_CHANGE ausgewertet werden, die immer dann gesendet wird, wenn sich der Inhalt des Input-Feldes ändert. Diese Nachricht könnte man auch dafür nutzen, um die Liste der ComboBox anzuzeigen und in dieser den ersten Eintrag zu selektieren, der mit der Eingabe in dem Input-Feld übereinstimmt. Schau dir dazu in der AutoIt-Hilfe die Beispiele zu _GUICtrlEdit_Create an!

    Anmerkung: Input-Controls existieren nur in AutoIt und sind vereinfacht gesagt Edit-Controls mit nur einer Zeile. Deshalb funktioniert $EN_CHANGE mit beiden. Das EN bei $EN_CHANGE steht übrigens für Edit Notification.

    Wenn keiner der vordefinierten Einträge gelöscht oder geändert werden soll, ist das auch kein großes Ding... würde ich so aber nicht machen, denn auch hier kann sich ja was ändern und dann musst du diese Änderungen im Quellcode anpassen. Die vordefinierten Einträge würde ich nur beim ersten Start des Scripts verwenden, wenn noch keine Ini-Datei angelegt wurde. Danach dann nur die Werte aus der Ini-Datei verwenden, in der auch die vordefinierten Einträge gespeichert werden.

  • Ich sehe gerade, dass dieser Thread noch offen war. Habe das ganze jetzt völlig anders angegangen und bin damit sehr zufrieden. Von daher nochmals vielen Dank an alle. Thread wird geschlossen

  • Ich habe es nicht über eine Combobox gelöst, sondern über ein Input mit einer anderen SQL Abfrage, welche mir mehr Freiheiten lässt. Also ein ganz anderer Ansatz, als ich eigentlich ursprünglich machen wollte.