Entwickler-Ecke

WinForms - Entfernen eines Eintrags aus einer listBox


DenniZ - Mi 04.04.07 03:11
Titel: Entfernen eines Eintrags aus einer listBox
Hi!

Ich möchte schlicht und einfach einen Eintrag aus einer listBox (hier "listKickban") entfernen aber irgendwie, das will nicht funktionieren! Hab auch schon lange bei Google gesucht aber ich weis nicht woran das liegt!
Hier ist der Code:

C#-Quelltext
1:
2:
3:
4:
5:
6:
        private void btnDel_Click(object sender, EventArgs e)
        {
            ListBox listKickban = new ListBox();

            this.listKickban.Items.Remove(listKickban.SelectedItems);
        }


Ich weis gar nicht warum das nicht geht... achja, bin noch "Anfänger", hab 2 Wochen (ja viel fü mich :D ) nichts mehr gecoded!
Danke schonmal,
Dennis


UGrohne - Mi 04.04.07 10:19

Du erzeugst eine lokale ListBox und greifst dann auf die Klassenlistbox zurück? Erklär mir mal das Prinzip Deines Codes und was Du damit erreichen willst.

Außerdem: Wie funktioniert es genau nicht, also kommt ein Fehler?


DenniZ - Mi 04.04.07 11:35

Hmmm, also deine Anwort hat mich glaube mal wach gerüttelt, ich brauche die erste Zeile des Codes gar nicht (Listbox ... = ...) oder?! So kams mir vor *g*

Mein Prinzip:
Einen Eintrag zu einer ListBox hinzufügen und später auch wieder entfernen, es soll dann der markierte entfernt werden.
Das Hinzufügen ist ja einfach, habe ich schon mal gemacht nur beim Löschen hacke ich irgendwie gerade.
Habe den Code gerade auch noch ohne die erste Zeile probiert, er geht nicht.

Es kommt kein Fehler, es passiert leider nur gar nichts, keinen Effekt.


UGrohne - Mi 04.04.07 11:50

Lässt Du das Markieren von mehreren Einträgen zu? Wenn nicht, solltest Du statt SelectedItems lieber SelectedItem nehmen:

C#-Quelltext
1:
2:
3:
4:
        private void btnDel_Click(object sender, EventArgs e)
        {
            this.listKickban.Items.Remove(listKickban.SelectedItem);
        }

Ansonsten musst Du eine Schleife verwenden

C#-Quelltext
1:
2:
foreach (object val in listKickBan.Items.SelectedItems)
   listKickBan.Items.Remove(val);


DenniZ - Mi 04.04.07 12:11

Hmm ich sehe schon, blöde Fehler von mir! Danke dir schonmal, jetzt geht das jedenfalls.

Noch eine kleine Frage dazu, ich habe jetzt in der ListBox eingestellt dass man mehrere Auswählen darf. Jetzt versuche ich deinen Code (die Schleife) zu verwenden. Aber! Müsste das nicht so heißen:

C#-Quelltext
1:
2:
            foreach (object val in listKickban.SelectedItems)
                listKickban.Items.Remove(val);


object val in listKickban.SelectedItems ? Weil Items.SelectedItems geht ja gar nicht. Da bringt Visual Studio übrigens dann auch einen Fehler *g*

Er bringt dann auch so beim Code einen Fehler, im Debuggin-Modus markiert er ds "in" und so lautet der Fehler:
"List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change."
Kann leider nichts damit anfangen, hab mit Schleifen noch nicht gearbeitet!


UGrohne - Mi 04.04.07 13:29

Remove manipuliert direkt die Collection, daher funktioniert der Enumerator nicht mehr. Ich hab hier einen kleinen Workaround, etwas Besseres ist mir bisher nicht eingefallen:

C#-Quelltext
1:
2:
3:
4:
5:
            List<object> list = new List<object>(listKickBan.SelectedItems.Count);
            foreach (object val in listKickBan.SelectedItems)
                list.Add(val);
            foreach (object val in list)
                listKickBan.Items.Remove(val);


DenniZ - Mi 04.04.07 13:49

Danke dir vielmals! Funktioniert einwandfrei!

:)