Bei mehreren gleichen ListboxEinträgen wird nicht der Richtige gelöscht"

  • VB.NET

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

    Bei mehreren gleichen ListboxEinträgen wird nicht der Richtige gelöscht"

    Hallo

    Habe die Listbox im Betrieb,
    Einfügen,löschen ,editieren.

    Jetzt habe ich bemerkt, das Einträge welche mehrfach vorhanden sind,nur bei einem besonderen Status richtig gelöscht werden.

    Lösche ich von oben ,wird der selektierte Eintrag gelöscht.
    Lösche ich von unten ,wird nicht der Selektierte, auch mit richtigen Index,gelöscht.

    Es wird der erste gleiche Eintrag von Oben gelöscht.

    VB.NET-Quellcode

    1. If ListAusgBefehle.SelectedIndex = -1 Then
    2. MessageBox.Show("auswählen!")
    3. Else
    4. ListAusgBefehle.Items.Remove(ListAusgBefehle.Items(ListAusgBefehle.SelectedIndex))
    5. End If


    Danke und Gruß

    fraju schrieb:

    RemoveAT löscht einfach den Ithem,ist das so?

    Ich hatte geglaubt, Du hast das selbst rausbekommen und fügst das nur als Kommentar an.
    Ist diese Frage ernst gemeint?
    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!
    Klaro - RemoveAt tut das, wie es benannt ist.

    das mit oben und unten ist immernoch unklar formuliert, aber Hinweis:

    Wenn du von 0 bis Listbox.Items.Count-1 durch die Items gehst, und an einer Stelle eines weglöschst - dann verschieben sich logischerweise alle Indexe aller folgenden Itemse.

    Daher: Suchschleifen, die was rauslöschen sollen, müssen immer rückwärts durch die Auflistungen laufen.
    Hallo

    Das Prog ist schon 2 Jahre alt und auch etwas Komplexer.
    Wenn dann das löschen nicht mehr richtig geht,weil Doppelte Einträge noch nie vorhanden waren,dann komme nicht nur ich ins Grübeln.
    Erst mußte ich mal rauskriegen wieso die Listen dann eigenartig werden.
    Es dauert eine Weile bis dies auf doppelte Einträge zurückgeführt werden kann

    Wieso geht es aber wenn keine doppelten Einträge vorhanden sind?

    Gruß
    Wiebitte, waaas??

    fraju schrieb:

    Wenn dann das löschen nicht mehr richtig geht,weil Doppelte Einträge noch nie vorhanden waren,dann komme nicht nur ich ins Grübeln.

    das Löschen geht nicht mehr richtig, weil irgendetwas nie vorhanden war?? - da grübelichaberauch ;)

    Wie gesagt - ich bilde mir ein, ungefähr dein Problem zu kennen, und habe auch schon die Lösung genannt, aber es ist glaub in deim eigenen Interesse, wenn du dir eine präzisere Denkweise angewöhnst.

    ErfinderDesRades schrieb:

    Wie gesagt - ich bilde mir ein, ungefähr dein Problem zu kennen, und habe auch schon die Lösung genannt, aber es ist glaub in deim eigenen Interesse, wenn du dir eine präzisere Denkweise angewöhnst.

    Dies möchte ich nicht kommentieren. ;)


    Ich habe kein Problem , denn VB ist für mich eine Beschäftigung mal alle viertel Jahre.
    Wenn man natürlich aus einer Einfachen Frage eine Diskusionsrunde machen möchte ,Ich bin dabei.

    Wieso geht es aber wenn keine doppelten Einträge vorhanden sind?

    Das wollte ich nur noch wissen, ist aber nicht wichtig.

    Gruß
    vermutlich löscht er dann nix, und dann gibts auch kein Problem.
    Er darf sogar ein Item löschen, weil ja erst danach sich die Indizees der folgenden Items verschieben. Erst wenn er ein zweites Item löschen will, fällt auf, dass die Items ja an verschobenen Indizees sitzen.

    lies nochma post#5 - "Hinweis" - ok ist schlampig formuliert, aber ich denke, der Gedanke daran, dass, wenn man aus der Mitte einer Auflistung ein Element wegnimmt, dass dann alle folgenden Elemente verschoben werden, müsste die Ursache des Problems (wenn ichs am Ende nicht doch falsch verstanden habe) kennzeichnen.

    Die daraus folgende Lösung ist doch logisch, oder?
    ach soo!

    VB.NET-Quellcode

    1. ListBox2.Items.Remove(ListBox2.Items(ListBox2.SelectedIndex))

    wenn mehrere Strings "Item0" in Listbox2 drinne sind, und ListBox2.Items(ListBox2.SelectedIndex) steht auf dem zweiten Exemplar, dann willerhalt ein "Item0" löschen, und durchsucht die Listbox, und das erste "Item0", wasserfindet, löschterhalt. Das ist natürlich nicht unbedingt dasjenige "Item0", auf welchem der SelectedIndex steht.

    Also .RemoveAt ist nicht nur performanter, sondern auch noch zuverlässiger.

    Und: Ich hatte dich mit von oben / von unten immer falsch verstanden - ich dachte, du wollest in einer Schleife alle "Item0"se löschen, bis auf eines - sowas gibts ja auch.