Autor Beitrag
pimpl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 18.05.12 23:45 
Hallo alle!!

Ich möchte in ein int[]-array die Indices der selektierten Items einer Listview/Listbox abspeichern um dann mithilfe des Arrays die selektierten Items anzusprechen. Dabei sollen MEHRERE Items gleichzeitig selektiert sein.
Das einleden der Indices in das Array habe ich mir so in etwa vorgestellt:

ausblenden C#-Quelltext
1:
2:
3:
4:
int anz = listView1.SelectedItems.Count;
int[] a = new int[anz];
for (int i = 0; i < anz; i++)
  a[i] = listView1.SelectedIndices[i];

.. Theoretisch müssten dann bei Eingabe von
ausblenden C#-Quelltext
1:
label.text = "" + a;					

die Indices der selektierten Items als Zahl dargestellt werden.
bei mir steht aber im label.text:
ausblenden Quelltext
1:
System.Int32[]					

Nun weiß ich offensichtlich nicht, wie ich "listView1.SelectedIndices" behandeln soll, bzw. welchen Rückgabewert der Ausdruck mir liefert.
Bei multiselect = false, liefert "listview.selectedindex" einen integerwert, nämlich den index des Eintrages. Wieso tut "listView1.SelectedIndices" nicht das gleiche inform eines arrays?

Vielen Dank für Eure Hilfe!!!

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 19.05.12 08:53 
Hallo :welcome:

deine Annahme, daß bei label.text = "" + a die Indizes als Zahlenwerte ausgegeben werden ist falsch (denn ein Array selbst weiß ja nicht, wie die einzelnen Elemente formatiert werden sollen, z.B. welches das Trennzeichen sein soll - und daher wird einfach der Datentyp selbst ausgegeben).
Dafür gibt es aber z.B. die Methode String.Join:
ausblenden C#-Quelltext
1:
label.text = String.Join(", ", indices);					

Dafür muß das Array indices aber dann den Typ string[] haben!

Ab .NET 4 geht es jedoch noch viel einfacher, da es dann auch eine Überladung von String.Join mit einem beliebigen IEnumerable<T> (Auflistung) gibt:
ausblenden C#-Quelltext
1:
label.text = String.Join(", ", listView1.SelectedIndices);					

Unter How to join int[] to a character separated string in .NET? gibt es noch weitere Vorschläge zu anderen Umsetzungen (falls du doch noch nicht .NET 4 benutzt und kein string[]-Array erzeugen möchtest).

P.S. Der Ausdruck "" + a ist nichts anderes als "" + a.ToString() und dies läßt sich einfach zu a.ToString() kürzen (was auch deine Ausgabe erklärt).
pimpl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 19.05.12 11:38 
Vielen Dank für die schnelle Antwort.

Problem ist, wie du schon sagtest, dass das Array selbst nicht weiß, "wie die einzelnen Elemente formatiert werden sollen, z.B. welches das Trennzeichen sein soll - und daher wird einfach der Datentyp selbst ausgegeben".
Habe das Problem jetzt folgendermaßen gelöst:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
int anz = listView1.SelectedItems.Count;
int[] a = new int[anz];
for (int i = 0; i < anz; i++)
    a[i] = listView1.SelectedIndices[i];
for (int i = 0; i < anz; i++)
    label1.Text += "" + a[i] + ", ";


Moderiert von user profile iconTh69: C#-Tags hinzugefügt