Combobox BindSource und My.Settings

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Combobox BindSource und My.Settings

    Moin Leute,

    Ich habe folgende Ausganssitutaion.

    My.Settings.Name1 ist als System.Collections.Specialized.StringCollection hinterlegt.
    Im Form_Load binde ich die ComboBox1 an die Settings

    VB.NET-Quellcode

    1. ComboBox1.DataSource = My.Settings.Name1


    Die Einträge werden auch alle hübsch gespeichert, so wie es soll.

    Nun habe ich versucht einen einzigen Eintrag aus der gebundenen ComboBox1 zu löschen, und zwar so:

    VB.NET-Quellcode

    1. ComboBox1.DataSource = Nothing
    2. ComboBox1.Items.Remove(ComboBox1.SelectedItem)
    3. My.Settings.Save()
    4. ComboBox1.DataSource = My.Settings.Name1


    Das ganze funktioniert aber nicht, ich bekomme weder fehlermelung noch sonst irgendetwas, das einzige was Passiert ist:
    1) Einträge verschwinden aus der ComboBox1, Binding wird ja auchgehoben.
    2) Einträge werden wieder an die ComboBox1 gebunden.

    Im Prinzip genau das was mein Code machen soll, nur das die gewählte Eintrag nicht gelöscht wird.
    Hier mein Logikproblem: Wie bekomme ich einen von mir asugewählten Eintrag aus der Combobox raus?
    Wenn ich es ohne ComboBox1.DataSource = Nothing machen wird mir nur eine Exception geworfen:

    Quellcode

    1. Die Items-Auflistung kann nicht geändert werden, wenn die DataSource-Eigenschaft festgelegt ist.


    Und leider habe ich keinen Blassen Schimmer wie ich direkt aus der DataSource lösche.

    Kann mir jemand evtl auf die Sprünge helfen, was an meiner Abfolge falsch ist?

    Gelöschter Benutzer schrieb:

    Im Form_Load binde ich die ComboBox1 an die Settings
    Kannst du es nicht schon im Designer dran binden? Würde es dann funktionieren?

    Sonst entferne alle Items aus der StringCollection, und füge Sie dann neu aus der ComboBox hinzu.
    Wenn Du die Datenbindung aufhebst und dann ein ComboBoxItem löschst, passiert natürlich nix in den Settings.
    Wenn Du es so machen willst, wie bisher, dann:

    VB.NET-Quellcode

    1. For Each Text In My.Settings.Name1
    2. If ComboBox1.SelectedItem.ToString = Text Then My.Settings.Name1.Remove(Text) : Exit For
    3. Next

    danach brauchst Du zwar nochmal die Zuweisung der Cbx.DataSource an die Settings, aber so wird eben die DataSource an sich geändert.

    Allerdings ist das alles kein richtiges DataBinding, da eben eine Änderung in der Cbx sofort auch zu einer Änderung in den Settings und vice versa führen müsste. Macht es aber nicht. Mal sehen, ob man das anders hinbekommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    ichduersie schrieb:

    im Designer dran binden


    Danke für den Tipp, aber das scheint nicht zu funktionieren.

    VaporiZed schrieb:

    Wenn Du die Datenbindung aufhebst und dann ein ComboBoxItem löschst, passiert natürlich nix in den Settings.


    Genau, da war auch mein Verständnissproblem, den ich musste das Binding aufheben um die Daten löschen zu können, aber jedesmal wenn ich das Binding aufgehoben habe, war nix mehr da zum löschen.
    Aber dein Post scheint mir irgendwie die Augen geöffnet zu haben, den so läuft es nun bei mir:

    VB.NET-Quellcode

    1. My.Settings.Name1.Remove(Combobox1.SelectedItem.ToString)
    2. My.Settings.Save()
    3. My.Settings.Reload()
    4. Combobox1.DataSource = My.Settings.Name1
    5. Combobox1.Refresh()


    Das scheint mir aber nicht mehr die "Feine Englische Art" zu sein, oder?
    Ich würde mal behaupten dass du dir Reload() und v.a. Refresh() sparen kannst. Aber sonst gibt es da nichts auszusetzen. Musst du die DataSource neu setzen? Theoretisch wäre selbst das überflüssig, oder nicht?

    Edit: Im Designer binden geht nicht, und in der Tat musst du die DataSource neu setzen, oder Refresh() aufrufen. Reload kannst du dir sparen, weil du im RAM ja eh schon die neueste Version hast und Refresh() fordert die ComboBox auf, sich neu zu zeichnen. Refresh wird durch das setzen der DataSource impliziert. Kannst dir aussuchen, was schöner ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ichduersie“ ()