remove selecteditem

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    remove selecteditem

    Moin,
    ansich ist es wahrscheinlich ganz simpel, aber ich komm an der stelle grad nicht weiter.

    Ich habe 2 Listboxen
    mit diesem Code erreiche ich, das wenn ich in listbox1 ein item selecte, parallel auch in listbox2 selected wird.

    VB.NET-Quellcode

    1. ListBox2.SelectedIndex = ListBox1.SelectedIndex


    Nun möchte ich über einen button die selected items löschen

    VB.NET-Quellcode

    1. ​ListBox1.Items.Remove(ListBox1.SelectedItem)

    VB.NET-Quellcode

    1. ​ListBox2.Items.Remove(ListBox2.SelectedItem)


    Wenn ich das ganze ausführe, wird leider nur das item aus listbox1 gelöscht, obwohl in listbox2 auch ein item selected ist

    Woran liegt das ?

    MFG
    Wird der Code aus deinem ersten Schnipsel vielleicht beim löschen nochmal ausgeführt?
    Weiß ja nicht ob du den vielleicht in ein Change-Event gepackt hast.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Schamash Jou.
    @DaWeed032 Der Code funktioniert genau so, wie Du ihn geschrieben hast.
    Wie sieht Dein entsprechender Code aus?
    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!
    Danke für das Engagement,

    ich hab jetzt einfach etwas ausprobiert -> unswar hab ich die Codezeile

    VB.NET-Quellcode

    1. ListBox2.Items.Remove(ListBox2.SelectedItem)

    einfach über

    VB.NET-Quellcode

    1. ​ListBox1.Items.Remove(ListBox1.SelectedItem)


    und komischer weise geht es jetzt !

    Aber danke für eure Bemühungen

    MFG
    Um den "Fehler" zu finden würde ich mal einen Haltepunkt ist die Zeile "ListBox2.SelectedIndex = ListBox1.SelectedIndex" stellen und prüfen ob beim Löschen des Items aus Liste1 der Code zum erstellen der Haken in Liste 2 Aufgerufen wird.

    Das würde nämlich sowohl deinen ursprünglichen Fehler, als auch deine Lösung erklären.

    Denn nun hast du das Problem zwar umgangen aber noch nicht verstanden/gelöst.
    Das würde mich ärgern :D :D
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ja ist doch klar. Du hast im SelectedIndexChanged Event der ListBox1 deine Funktion um das dort selektierte Item zu löschen.
    Löschst du nun zuerst das Item der ListBox1, ändert sich dort der auch der Index (vermutlich auf -1, was "nix gewählt") entspricht.
    Dann versuchts du, das in ListBox 2 gewählte Item (Index -1) zulöschen, dort ist der Index auf -1, also kann dort nichts gelöscht werden.

    Andersrum funktionierts, wie du schon festgestellt hast
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Ja ist doch klar.

    Klar ist gar nix solange wir den Code des Erstellers nicht kennen.

    2. ist deine Erklärung falsch da in Liste2 nicht Liste1.selectedItem sonder auch Liste2.SelectetItem gelöscht wird. Es ist also egal auf welchen Status sich Liste1 ändert wenn Liste 2 gelöscht werden soll.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Wenn er das alles im SelectedIndexChanged Event hat, und in Listbox2 immer das Item gewählt ist, das auch in ListBox1 gewählt ist, ist meine obige Erklärung korrekt.

    1. ListBox1 Item 1 wird angeklickt
    2. SelectedIndexChanged Event von ListBox2 tritt in Kraft
    3. ListBox2 Item 1 wird durch das Event angewählt
    4. ListBox1 Item 1 wird gelöscht, Index springt auf -1
    5. SelectedIndexChanged Event tritt in Kraft
    6. ListBox2 Selected Item springt auf -1
    7. ListBox2 gewähltes Item (-1) wird gelöscht
    8. Da bei index -1 nix ausgewählt ist, wird nix gelöscht

    Falls er das nicht im SelectedIndexChanged Event hat, ist meine Erklärung nicht korrekt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Hier nochmal der Code :D

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. ListBox2.SelectedIndex = ListBox1.SelectedIndex
    3. ListBox1.SelectedIndex = ListBox2.SelectedIndex
    4. End Sub​


    VB.NET-Quellcode

    1. ​Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
    2. ListBox2.Items.Remove(ListBox2.SelectedItem)
    3. ListBox1.Items.Remove(ListBox1.SelectedItem)
    4. End Sub

    DaWeed032 schrieb:

    VB.NET-Quellcode

    1. ListBox1.SelectedIndex = ListBox2.SelectedIndex
    Diese Zeile im oberen Snippet kannst Du löschen, beide Indizes sind bereits nach Abarbeitung der 1. Zeile gleich.
    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!
    Habs bei mir nachgebaut. Ist wie ich gesagt habe. Nach dem Löschen des Items in der ListBox1 wird das SelectedIndexChanged Event selbiger aufgerufen. Nach dem Löschen ist der Index der ListBox2 auf -1. Daher wird dort nichts gelöscht.

    Hab ne MessageBox mit dem in ListBox2 gewählten Index eingebaut, da bekommt man dann gesagt was "Sache" ist:


    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. ListBox2.SelectedIndex = ListBox1.SelectedIndex
    3. MessageBox.Show("Index LB2: " + ListBox2.SelectedIndex.ToString())
    4. End Sub
    5. Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
    6. ListBox1.Items.Remove(ListBox1.SelectedItem)
    7. ListBox2.Items.Remove(ListBox2.SelectedItem)
    8. End Sub


    Entweder, wie der TE schon geschrieben hat, die Reihenfolge der zu Löschend Items umdrehen, oder sowas in der Richtung:

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. ListBox2.SelectedIndex = ListBox1.SelectedIndex
    3. End Sub
    4. Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
    5. Dim iIndex1 As Integer = ListBox1.SelectedIndex
    6. Dim iIndex2 As Integer = ListBox2.SelectedIndex
    7. ListBox1.Items.RemoveAt(iIndex1)
    8. ListBox2.Items.RemoveAt(iIndex2)
    9. End Sub
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Trenne UI und Daten,
    GUI ist nur zum darstellen der Daten da und zum Handeln.

    Also.
    Liste im Code mit dem Elementen in der Liste und dort heraus die Daten löschen und das ListBox Aktualisieren.
    Ersparst du dir echt lästige Arbeit und Fragen warum etwas nicht klappt.
    Aber das Thema hatten wir ja schon mal. Hatte dir auch einen link gegeben den dir mal ansehen hättest können :D

    Facebamm schrieb:

    Trenne UI und Daten,
    GUI ist nur zum darstellen der Daten da und zum Handeln.


    ​Recht hat er. :thumbsup:
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    ​Vielleicht weiß er ja nicht, was damit gemeint ist bzw. wie er es umsetzen kann.

    @DaWeed032
    Liest dich mal in die "Drei-Schichten-Architektur" ein. Das wird dich langfristig weiter bringen.
    -> de.wikipedia.org/wiki/Schichte…alb_von_Software-Systemen
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen