ComboBox verliert SelectedItem während der Laufzeit

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    ComboBox verliert SelectedItem während der Laufzeit

    Hallo miteinander

    ich habe wiedermal ein Problem, das sich für mich nicht nachvollziehen lässt. Evtl. kann hier ein Profi mit Hintergrundwissen eine Aussage machen bzw. den Fehler begründen.

    Ich hab in meiner Software eine Form, in der alle Einstellungen machbar sind. Die einzelnen Kategorien sind unterteilt und es gibt für jede Kategorie ein eigenes Panel. In Summe sind das 59, die Anzahl spielt aber denke ich nicht so eine grosse Rolle, der Fehler lässt sich auch mit 2 Panel rekonstruieren. Auf diversen Panels gibt es ComboBoxen, die entweder mit Strings, also über Items.Addgefüllt werden und solche, die ich über DataSource fülle. Nur bei denen, die ich über DataSource fülle, passiert der Fehler: nach einigen Wechsel der Panels sind die ComboBoxen auf einmal wieder auf Index = 0 eingestellt. Dies geschieht genau in dem Moment, in dem ich die Panel wieder anzeigen lasse. Sprich wenn man nicht wieder den Button drückt, der das Panel anzeigt stimmen die Einstellungen noch und können auch korrekt gespeichert werden. Wenn man hingegen das Panel nochmals aufruft sind die Einstellungen zurückgesetzt.

    Ich hab mal testweise ein Dummy-Projekt nachgebaut, mit dem man den Fehler reproduzieren kann (siehe Dateianhang).

    Schritte zur Reproduktion des Fehlers:
    • Projekt starten; die 2 Panels werden angezeigt, im einen Panel sind zwei ComboBoxen, es ist jeweils ein Eintrag Index > 0 ausgewählt
    • nun klickt man auf einen der Buttons, danach auf den anderen; hierbei werden die Panels ausgeblendet und beim Drücken des Buttons wieder im "Main" Panel angezeigt. So funktioniert das im Prinzip auch in meiner Software
    • nun kann man ein paar mal abwechselnd die Buttons drücken, die Einstellungen bleiben dabei erhalten
    • nun klickt man auf den Button "Dummy" und hällt danach die Enter-Taste mal für 10 Sekunden gedrückt. In der Zeit wird das Panel "pnlDummy" diverse Male entladen und wieder geladen. Der Wert der beiden ComboBoxen verändert sich dabei nicht, das lässt sich via Debugging in Zeile 57 feststellen.
    • drück man nun aber wieder den Button "Resolutions" und mach dabei ebenfalls ein Debug in Zeile 57, also genau zu dem Zeitpunkt, indem das Panel wieder angezeigt wird, stellt man fest, dass sich der Wert von cbResolution exakt in dem Moment auf Index = 0 zurücksetzt. Dies passiert mit der anderen ComboBox nicht...

    Gibt es dafür eine logische Erklärung?

    Ich muss/möchte für diese ComboBoxen unbedingt die Enums nutzen, da ich so die gespeicherten Einstellungen direkt im Code verwenden kann. Und wir sprechen hier von gut 40 Einstellungen, die so gespeichert werden.

    EDIT: Ich hab das übrigens mit .NET 4.5 - 4.6.1 getestet, überall mit selbem Ergebnis.
    Dateien
    • PanelTest.zip

      (78,75 kB, 118 mal heruntergeladen, zuletzt: )
    jo - komisch.

    Ich hab einiges vergeblich probiert, und einen Grund fürs komische Verhalten schon garnet gefunden.

    Schlussendlich habich eine BindingSource zwischengeschoben - jetzt scheints weg zu sein, das problem.
    Dateien
    • PanelTest00.zip

      (13,12 kB, 109 mal heruntergeladen, zuletzt: )
    @DanCooper Ich hatte einen "inversen" Effekt.
    Combobox rauf und runter, und bei einem Eintrag wurde der Tab eines TabControls ohne Reiter gwewechselt, da wechselte der Fokus zum TabControl und hat bei weiter rauf-runter Unfug gemacht.
    Ich hab diese Situation abgefangen und den Fokus eirder auf die Combobox gesetzt und alles war fein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ErfinderDesRades schrieb:

    jo - komisch.

    Ich hab einiges vergeblich probiert, und einen Grund fürs komische Verhalten schon garnet gefunden.

    Schlussendlich habich eine BindingSource zwischengeschoben - jetzt scheints weg zu sein, das problem.

    Danke, dann versuch ich das mal in meinem Projekt umzusetzen.
    Das Verhalten könnte man aber schon als Bug in vb.NET bezeichnen, oder? Müsste man da mal MS drauf hinweisen?

    RodFromGermany schrieb:

    @DanCooper Ich hatte einen "inversen" Effekt.
    Combobox rauf und runter, und bei einem Eintrag wurde der Tab eines TabControls ohne Reiter gwewechselt, da wechselte der Fokus zum TabControl und hat bei weiter rauf-runter Unfug gemacht.
    Ich hab diese Situation abgefangen und den Fokus eirder auf die Combobox gesetzt und alles war fein.

    Das war das erste, was ich überprüft hatte. War mir dann aber sicher, dass das nicht das Problem ist, denn es resetten sich auch die Boxen, die man gar nicht bearbeitet oder angeklickt hatte.

    DanCooper schrieb:

    Das Verhalten könnte man aber schon als Bug in vb.NET bezeichnen, oder?
    Jo, findich auch.
    Bei meine Tests kam auch heraus, dass der Index auch dann verloren geht, wenn die Button_Click-Methode ühaupt nix tut!
    Also einfaches Enter-Halten lässt iwann den Index verloren gehen - völlig panne!

    Allerdings werden die das auf eine Meldung hin kaum fixen, die haben dringendere Probleme, als diese doch sehr exotische Vorgehensweise.
    Aber probier ruhig mal, das zu melden, ist auch immer interessant, wann und mit welcher Begründung sie den BugFix ablehnen. ;)