Hilfe bei ListBox in C#?
Hi,
ich schreibe ein kleines Programm für mich selber. Ich habe eine ListBox aus der ich quasi ein Item rauslöschen möchte, wenn ich ein Item aus der ListBox ausgewählt habe und dann auf einen "löschen" Button drücke. Habe zwar vieles im Internet gefunden aber nichts hat mir wirklich geholfen. Meine Idee war es quasi immer wenn ein Item in der Liste angeklickt wird, ein string (namens selectedItem) den Inhalt des angeklickten Items "aufnimmt". Und dann soll das Item mit HausaufgabenBOX.Items.Remove(selectedItem); löschen. aber das klappt bei mir nicht zumindest bekomme ich immer "abstürze" des Programms, wenn ich ein Item auswähle.
Ich habe folgendes Event verwendet:
private void HausaufgabenBOX_SelectedIndexChanged(object sender, EventArgs e)
{
//Item aus der Box auswählen und in einem String speichern
}
In der funktion soll eben das nach dem "//" geschriebene passieren
2 Antworten
Zu beachten wäre bei deinem Plan, dass nach dem Entfernen des selektierten Eintrags das SelectedIndexChanged-Event erneut getriggert wird, denn die Selektion ändert sich nach dem Löschen ja erneut. Nur gibt es dann kein selektiertes Item mehr.
Auf diese Weise würde es klappen:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox listBox = sender as ListBox;
string selected = listBox.SelectedItem?.ToString();
listBox.Items.Remove(selected);
}
Beim zweiten Aufruf des Handlers würde SelectedItem auf null zeigen. Das ist bei diesem Code in Ordnung, denn der null-conditional Operator sorgt dafür, dass in diesem Fall nicht noch versucht wird, die ToString-Methode aufzurufen. Würdest du den Operator weglassen, wäre mit einer NullReferenceException zu rechnen.
Allerdings könnte man sich auch gleich den Typecast sparen. Er ist für diese Aktion nicht wichtig. Diese zwei Zeilen genügen für den Methodenkörper:
ListBox listBox = sender as ListBox;
listBox.Items.Remove(listBox.SelectedItem);
Und wenn du deine ListBox benannt hast, reicht ebenso eine Zeile:
listBox1.Items.Remove(listBox1.SelectedItem);
Allerdings hätte diese Einzeilerlösung den Nachteil, dass die Handler-Methode dann nur für diese eine ListBox einsetzbar wäre.
Ebenso könnte man die Remove-Aktion einsparen, indem man mit einem null-Check prüft, ob sie überhaupt stattfinden soll:
ListBox listBox = sender as ListBox;
object selected = listBox.SelectedItem;
if (selected != null)
{
listBox.Items.Remove(selected);
}
ich immer "abstürze" des Programms
Ist keine Fehlermeldung.
//Item aus der Box auswählen und in einem String speichern
Ist kein Code.
Was meinst Du, wie man dir helfen soll? Meine Glaskugel ist leider in der Werkstatt.