Hilfe beim Debuggen - Listbox hat selectedIndex=0 nach befüllen

  • VB.NET

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

    Hilfe beim Debuggen - Listbox hat selectedIndex=0 nach befüllen

    Moin!

    ich habe eine Listbox mit Werten befüllt auf Basis eines DataSource.

    Nun habe ich folgende Funktion die im Anschluss reagiert:

    VB.NET-Quellcode

    1. Private Sub lb_material_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lb_material.SelectedIndexChanged
    2. If lb_material.SelectedIndex = -1 Then ' keine Auswahl in dem Material -> andere Listen löschen
    3. Reset_Profil_Delimeter()
    4. Else
    5. _CMaterialID = _Controls.GetControlValueAsLong(lb_material) ' merken des gewählten Materials
    6. ' befüllen der nächsen Liste
    7. FillProfilArt()
    8. End If
    9. End Sub


    Es wird aber entgegen meiner Erwartung für SelectedIndex der Wert 0 angezeigt. Das ist doch aber das Kennzeichen das der erste Listenwert markiert ist.

    ... oder liege ich da falsch?

    Wenn ich richtig liege - wie kann ich das Programm stoppen wo SelectedIndex den Wert zugewiesen bekommt?

    Gruß Jan
    Schreib doch als erste Zeile in Deiner Sub: If lb_material.SelectedIndex = 0 Then Stop
    Sobald der Compiler dort anhält, schaust Du Dir das Fenster Aufrufhierarchie (Menü Ansicht -> Aufrufhierarchie) an. Da steht drin, in welcher Reihenfolge die Codeaufrufe sind, die zur aktuellen Position/Situation führen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    jan99 schrieb:

    Es wird aber entgegen meiner Erwartung für SelectedIndex der Wert 0 angezeigt. Das ist doch aber das Kennzeichen das der erste Listenwert markiert ist.
    Das ist aber das Verhalten bei Datengebunden Listboxen: Wenn Daten da sind, wird auch etwas selectiert.
    SelectedIndex=-1 kann also nur auftreten, solange keine Daten da sind.
    Sobald du eine gefüllte DataSource zuweist, wird einer der Datensätze selektiert.
    Das führt dann automatisch zum Auslösen deines SelectedIndexChanged-Events.
    "Stoppen" im Sinne von "Unterbinden" kann man diesen Vorgang nicht - wozu auch?

    Tja, wie EdR schrieb: Das geht mit ner datengebundenen ListBox nicht. Das liegt daran, dass durch das DataBinding in der ListBox das angezeigt wird, was in der BindingSource (BS) steht. Und da die BS nicht Position = -1 annehmen kann, sobald in ihrer Liste Dinge drinstehen, gilt das auch für die ListBox. Was Du machen könntest, aber Dir dabei DataBinding aushebelst: Du bindest die ListBox nicht an die BS, sondern arbeitest mit ListBox.Items.Add/AddRange und füllst quasi manuell auf Dein Startsignal hin die BS-Items in die ListBox. Die Auswahl musst Du dann eben so bestätigen, dass Du entweder sagst DeineBindingSource.Position = ListBox.SelectedIndex (nur logisch sinnvoll bei ner ListBox, deren Einträge in der gleichen Reihenfolge wie bei der BS ist). Oder Du ignorierst die BS und arbeitest gleich mit dem SelectedItem der ListBox. Kommt drauf an, was Du vorhast.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Diese automatische Vorauswahl ist das einfachste, voreingebaute Mittel um eine gültige Ansicht sicherzustellen.
    Mit einer datengebundenen List-/Combo-box sind ja meist weitere Controls verknüpft, in die man auch was eingeben kann, und abspeichern.
    Derlei Funktionalität würde ja Fehler verursachen, wenn nichts angewählt ist - und deshalb sorgt die BS wohl dafür, dass eben doch etwas angewählt ist.
    Will man ausdrücklich die Option haben, nichts zu wählen - muss man halt Aufwand treiben. Aber nicht nur an der Combobox, sondern die anneren Controls müssen ja auch disabled/enabled werden.