GUICtrlCreateCombo spielt verrückt

  • Hi liebe Auto'IT'ler....

    ich trete (leider) mal wieder mit einem Problem an Euch heran und hoffe jemand weiß, warum dies bei mir (in meinem Skript) so passiert.

    Erklärung zu meinem Skript - hier wählen unsere Mitarbeiter über mehrere Dropdownmenüs entsprechend notwendige Einträge aus, bestätigen dann einen Button der interne Prozesse ausführt. Durch den Klick auf dem Button wird die GUI wieder auf "Standard" zurückgesetzt, d.h. das unter anderem auch die Combo-Boxen wieder leer sind und der User was auswählen muss.

    Soweit die Theorie. In der Praxis passiert aber leider immer öfter ein Phänomen, welches ich mir nicht erklären kann.

    Klickt der User den entsprechenden Button sollte normalerweise der folgende Code ausgeführt werden, um die Combo-Box wieder zurückzusetzen:

    AutoIt
    GUICtrlSetData($input_infos[0], $maerkte, "")

    Die Variable $maerkte ist gefüllt mit Werten wie WERT1|WERT2|WERT3 usw.

    Das funktioniert auch zu 90%... jedoch manchmal passiert es, dass er mir die Werte nicht - wie gewünscht - untereinander auflistet, sondern nebeneinander. Er ignoriert also die Trennzeichen und gibt mir so also nur einen einzigen Eintrag im Dropdown her.

    Ich habe auch schon mehrere Dinge versucht. Ich habe versucht das Dropdown komplett zu clearen und anschließend zu füllen und sogar noch als i-Tüpfelchen mit _GUICtrlComboBox_SetCurSel komplett zu resetten.

    AutoIt
    GUICtrlSetData($input_infos[0], "")
    GUICtrlSetData($input_infos[0], $maerkte, "")
    _GUICtrlComboBox_SetCurSel($input_infos[0], -1)

    All das funktioniert leider nicht mehr, sobald das Dropdownmenü einmal anfängt zu spinnen :( :( :(

    Kennt jemand dieses Phänomen und weiss, wie ich es abstellen kann?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    1. Kannst du ein kleines lauffähiges Skript einstellen mit dem der Fehler reproduzierbar ist?
    2. Woher bezieht dein Skript die Daten für die DropDowns? (Vermutete Fehlerquelle Netzwerk bzw. fehlerhafte DB Ergebnisse)
  • Entschuldigung für die späte Rückmeldung.

    zum Punkt 2: die Inhalte sind Hardcoded in entsprechenden Variablen. Er soll beim reset also einfach nur wieder den Inhalt der Variable einlesen und keine Vorauswahl treffen.

    AutoIt
    GUICtrlSetData($input_infos[0], $maerkte, "")

    In der Variable $maerkte sind z.B. die notwendigen Entrys drin. Das heißt, ich schließe das mal als Fehler aus, da ja hardcoded.

    Zum Punkt 1: Naja bedingt - ich kann gern mein ganzes Skript online stellen, aber ich denke da sieht man den Wald vor lauter Bäumen nicht mehr. Sind dort etwas mehr als 1000 Zeilen Code.

    In anderen Skripts von mir konnte ich das Problem nicht nachvollziehen. Jedoch mach ich mit den Combo's ja keine Wunderwerke. Sie werden erstellt, mit Daten gefüllt und beim drücken auf einen Button lediglich ausgelesen und wieder zurückgesetzt. Es funktioniert ja auch zu 90% aber dann kommt der Moment wo es verrückt spielt.

    Soll ich mein Skript hier einstellen mit Angabe der Zeilen wo die Combos sind und wo sie resetet werden?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Mal ein paar Gedanken:

    - $maerkte kannst du nur als Fehlerquelle ausschließen, wenn sie definitiv nirgendwo "angefasst" wird, also nur 1mal definiert und danach nur (ein)gelesen wird

    - Hast du dir mal den Rückgabewert von der Funktion geben lassen, nicht das er aus irgendeinem Grund mit 0 oder -1 zurück kommt ("-1 in case of invalid data").

    - Mal probiert mit GUICtrlDelete diese Ctrl zu löschen und danach wieder zu erstellen? Evtl. bleibt dann der Fehler aus bzw. lässt sich umgehen?

    - Mal probiert die Werte ohne die Variable, sondern Hardcoded einzugeben?

    3 Mal editiert, zuletzt von Moombas (5. September 2018 um 11:18)

  • Hm... gute Idee mit dem GUICtrlDelete... hab ich gleich mal probiert.

    Jedoch auch hier: Sobald der Fehler im Dropdown aufgetreten ist, lässt sich selbst mit löschen und neu erstellen des Controls der Inhalt nicht wieder korrekt herstellen ;(

    Ich will nur nochmal erwähnen, dass er schon aus der Variable die Inhalt einliest und ins Dropdown einspielt, aber halt alles in einer Zeile und nicht - wofür ein DropDown ja da ist - untereinander.

    Richtiges DropDown:

    - Markt 1

    - Markt 2

    - Markt 3

    Falsches Dropdown was "irgendwann" einfach kommt:

    - Markt 1|Markt 2|Markt 3

    Wie kann das sein, wenn ein Control gelöscht und neu erstellt wird, sich nichtmal hierbei der Fehler lösen läßt???

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Hi,

    möglicherweise wird in deinem Script/oder einer UDF der "GUIDataSeparatorChar" verstellt.

    Du könntest dir direkt vor dem neubefüllen der ComboBox das anzeigen lassen.

    AutoIt: z.B.
    ;~ #include <Date.au3>
    
    ...
    
    ConsoleWrite(_Now() & ' Opt("GUIDataSeparatorChar") = ' & Opt("GUIDataSeparatorChar") & @crlf)
    ;GUICtrlSetData ...

    Ansonsten könntest du komplett auf die _GUICtrlComboBox_... umsteigen, da sollte dieses Problem nicht auftreten können.

    Sollte der SeparatorChar verstellt sein, könnte es allerdings auch an anderen Stellen in deinem Script Probleme geben.

    AutoIt: _GUICtrlComboBox_...
    _GUICtrlComboBox_Create()
    _GUICtrlComboBox_AddString()
    _GUICtrlComboBox_ResetContent(); (Nicht _GUICtrlComboBox_SetCurSel)

    Es wäre etwas zielführender wenn wir das Script hätten:|

    mfg

    Zeitriss

  • Hast du, wie angemerkt, mal die Daten Hard in SetData (also nicht über die "Variable") gesetzt und geschaut ob das Abhilfe schafft? Wenn ja, gibt es hier irgendein Problem mit deiner "Variable".

    Ist sie als CONST deklariert? Dann kann sie sich ja normalerweise nicht ändern, da nicht zugelassen.

  • Zeitriss

    Das wird der Fehler sein!! In der Tat verwende ich GUIDataSeparatorChar - oh Gott... dass muss ich mal überprüfen.

    Moombas

    Ja hatte ich auch schon probiert - selbes Ergebnis :)

    Oscar

    Wie gesagt mein Skript ist bereits über 1000 Zeilen lang, da blickt keiner mehr durch ausser mir :)

    Und in kleineren Testskripten habe ich das Problem nicht. Aber siehe oben den Hinweis den Zeitriss - das wird sicherlich der Auslöser sein und ich werd mal schauen wie ich das fixen kann :)


    Update: Es war tatsächlich der SeparatorChar... jetzt im nachhinein betrachtet hau ich mir natürlich an die Stirn und sage mir "Na klar - wie einleuchtend".... aber ich wär vorher nie im Leben drauf gekommen :)

    Vielen Dank!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (5. September 2018 um 15:13)