Benutzer mit den meisten Antworten
Indizes ausgeben aus Listbox mit Multiple Select

Frage
-
Hi miteinander,
ich bin gerade etwas am verzweifeln an einer Aufgabe die ich eigentlich für einfach gehalten habe. Ich habe eine Listbox in der ich mehere Einträge angewählt habe. Nun möchte ich einen String in dem einfach die Indizes der ausgewählten Elemente stehen. Bin jetzt in den letzten Stunden im Internet schon auf einige Vorschläge gestoßen, leider funktioniert nichts bei mir.
getSelectedIndices existiert nicht und verschiedene foreach-Schleifen haben leider auch nichts gebracht. Wäre sehr dankbar wenn mir hier jemand weiterhelfen könnte. Danke im Voraus und
Gruß Chris
Antworten
-
Hallo,
ich möchte noch 2 Dinge zu Björns Antwort ergänzen:- Die
string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
string s = string.Join("Trennzeichen", lb.SelectedIndices);
- In WPF kann man über die
SelectedItems-Eigenschaft und
LINQ die Indices ermitteln. Es geht natürlich auch ohne LINQ und stattdessen mit normalen Schleifen. Das ist aber aufwendiger.
string s = string.Join(",", lb.SelectedItems//Ausgwählte Items .Cast<ListBoxItem>()//In eine Auflistung deines Typs Konvertieren .Select(x => lb.Items.IndexOf(x))//Die Idneces ermitteln .OrderBy(x => x));//Die Elemente sortieren, sie erscheinen sonst in der Reihenfolge, wie diese markiert wurden
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert relief.melone Montag, 13. Januar 2014 18:05
- Die
string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
-
Hab's gelöst. Also musste nur noch in deinem Cast auf <string> umstellen. Jetzt funktionierts. Vielen Dank. Da wäre ich nie drauf gekommen. Hier nochmal der Code für den Fall, dass jemand das gleiche Problem hat
string selectedLights = string.Join(",", lbLights.SelectedItems .Cast<string>() .Select(x => lbLights.Items.IndexOf(x)) .OrderBy(x => x));
- Als Antwort markiert relief.melone Montag, 13. Januar 2014 18:05
Alle Antworten
-
Hi Chris,
bei Windows Forms heiß die Methode SelectedIndices.
Bei WPF hab ich auf die Schnelle nicht gefunden.
MFG
Björn
-
Hallo,
ich möchte noch 2 Dinge zu Björns Antwort ergänzen:- Die
string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
string s = string.Join("Trennzeichen", lb.SelectedIndices);
- In WPF kann man über die
SelectedItems-Eigenschaft und
LINQ die Indices ermitteln. Es geht natürlich auch ohne LINQ und stattdessen mit normalen Schleifen. Das ist aber aufwendiger.
string s = string.Join(",", lb.SelectedItems//Ausgwählte Items .Cast<ListBoxItem>()//In eine Auflistung deines Typs Konvertieren .Select(x => lb.Items.IndexOf(x))//Die Idneces ermitteln .OrderBy(x => x));//Die Elemente sortieren, sie erscheinen sonst in der Reihenfolge, wie diese markiert wurden
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert relief.melone Montag, 13. Januar 2014 18:05
- Die
string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
-
Danke für die Antworten. Leider klappt das immer noch nicht ganz. Also was ich jetzt mal rausgefunden habe ist, dass lb.SelectedItems, dann nur Strings enthält (Allerdings zumindest die richtigen die ich auch auswählen). Wenn ich deinen Code durchlaufen lasse schmeißt er mich raus, weil er den String nicht auf das ListBoxItem Carsten kann. Hier die Fehlermeldung
Message "Unable to cast object of type 'System.String' to type 'System.Windows.Controls.ListBoxItem'." string
Hier nochmal der aktuelle Code
try { string selectedLights = string.Join(",", lbLights.SelectedItems .Cast<ListBoxItem>() .Select(x => lbLights.Items.IndexOf(x)) .OrderBy(x => x)); tbGroupName.Text = selectedLights; } catch (Exception ex) { tbGroupName.Text = ex.Message.ToString(); }
-
Ich gehe jetzt mal davon aus, das du mit WPF arbeitest. Ich schrieb schon oben:
//In eine Auflistung deines Typs Konvertieren
Du musst den Code also entsprechend an string anpassen:
string selectedLights = string.Join(",", lbLights.SelectedItems .Cast<string>() .Select(x => lbLights.Items.IndexOf(x)) .OrderBy(x => x));
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Hab's gelöst. Also musste nur noch in deinem Cast auf <string> umstellen. Jetzt funktionierts. Vielen Dank. Da wäre ich nie drauf gekommen. Hier nochmal der Code für den Fall, dass jemand das gleiche Problem hat
string selectedLights = string.Join(",", lbLights.SelectedItems .Cast<string>() .Select(x => lbLights.Items.IndexOf(x)) .OrderBy(x => x));
- Als Antwort markiert relief.melone Montag, 13. Januar 2014 18:05