none
Indizes ausgeben aus Listbox mit Multiple Select RRS feed

  • 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

    Sonntag, 12. Januar 2014 23:27

Antworten

  • Hallo,
    ich möchte noch 2 Dinge zu Björns Antwort ergänzen:

    1. Die string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
      string s = string.Join("Trennzeichen", lb.SelectedIndices);
    2. 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
    Montag, 13. Januar 2014 12:17
    Moderator
  • 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
    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

    Sonntag, 12. Januar 2014 23:55
  • Hallo,
    ich möchte noch 2 Dinge zu Björns Antwort ergänzen:

    1. Die string.Join-Methode kann das Array der Selektierten Elemente in einen String zusammen fassen:
      string s = string.Join("Trennzeichen", lb.SelectedIndices);
    2. 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
    Montag, 13. Januar 2014 12:17
    Moderator
  • 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();
                }

    Montag, 13. Januar 2014 17:54
  • 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.

    Montag, 13. Januar 2014 18:00
    Moderator
  • 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
    Montag, 13. Januar 2014 18:05