Hilfe bei ListBox in C#?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler