Entwickler-Ecke

WinForms - Eigenschaften des ListView Elements


DennisXX - Di 30.08.11 14:12
Titel: Eigenschaften des ListView Elements
Hallo zusammen !

kann mir vielleicht jemand sagen, wie ich den Namen eines aktuellen selektierten Items aus einer ListView auslesen kann. Mit meinen bisherigen Code bekomme ich anderes Ergebnis:


C#-Quelltext
1:
lvSourceDatabaseValues.SelectedItems.ToString();                    


Danke sehr für Hilfe!

Viele Grüße
Dennis


bakachan - Di 30.08.11 14:19

Wie wäre es mit der "Text"-Property vom ListViewItem?
(Im Normalfall solltest du beim Intelli-Sense einiges finden. Einfach mal den . tippen und schaun was für Vorschläge gemacht werden. Je nachdem welche Entwicklungsumgebung du verwendest...)


DennisXX - Di 30.08.11 14:24

Leider sehe ich in meinem Intellisense keine Porperty mit Namen Text, name oder ähnlichem :-( ich glaube, wenn es so einfach wäre, dann wäre ich auchs elbst darauf gekommen und ausprobiert hatte ich es bereits.

Viele Grüße
Dennis


bakachan - Di 30.08.11 14:27

Ah ich sehe grad den Fehler:
Du hast die ItemCollection und nicht ein einzelnes Item.
SelectedItems -> mehrere
Du kannst per Schleife durchlaufen oder per Index auf ein bestimmtes zugreifen.


DennisXX - Mi 31.08.11 09:42

Guten Morgen zusammen !

Ich habe noch einmal eine Frage zu dem ListView Element. Es sei der folgende Kopf einer For-Schleife gegeben:


C#-Quelltext
1:
for (int i = 0; i < lvSourceDatabaseValues.Items.Count; i++)                    


Muss die i Variable bei 0 beginnen, um alle Elemente in lvSourceDatabaseValues.Items.Count; auszulesen, oder bei 1 ?

Viele Grüße
Dennis


bakachan - Mi 31.08.11 09:45

Der Schleifenkopf ist korrekt.
Der Index der ItemCollection geht bei 0 los und endet bei Count-1.


DennisXX - Mi 31.08.11 10:42

Hallo zusammen !

kann mir vielelicht jemand von euch sagen, was hier in diesem Code falsch ist? Die Variable intNumber of SelectedValues beträgt in diesem Fall 1 und der Absturz erfolgt in dieser Zeile: strSelectedValues[intArrayIndex] = lvSourceDatabaseValues.SelectedItems[i].Text;


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
string[] strSelectedValues = new string[intNumberOfSelectedValues];
int intArrayIndex = 0;

for (int i = 0; i < lvSourceDatabaseValues.Items.Count; i++)
{
   if (lvSourceDatabaseValues.Items[i].Selected)
   {
      strSelectedValues[intArrayIndex] = lvSourceDatabaseValues.SelectedItems[i].Text;
      intArrayIndex = intArrayIndex + 1;
   }
}


Ich bekomme eine Exception, das der Indexwert1 ungültig sei!?

Viele Grüße
Dennis


Kha - Mi 31.08.11 10:58

Einmal verwendest du Items, einmal SelectedItems, das kann nicht gut gehen. Iteriere einfach über SelectedItems, dann brauchst du auch das if nicht mehr.


DennisXX - Mi 31.08.11 11:55

Hallo zusammen !

Kennt jemand von euch vielleicht das Event, welches immer dann ausgelöst wird, wenn man in einem Listenfeld einen einzelnen Wert anklickt bzw. selektiert? Welches Event ist das?

Besteht eigentlich die Möglichkeit mehrere Werte in einem Listenfeld zu selektieren, ohne die StrG Taste gedrückt zu halten. Gibt es dafür eine Möglichkeit?

Gibt es auch eine Möglichkeit Werte per C Sharp direkt zu selektieren?

Viele Grüße
Dennis


Th69 - Mi 31.08.11 13:08

Hallo Dennis,

bitte schau dir mal in Ruhe die einzelnen Eigenschaften und Ereignisse der ListView-Klasse in der MSDN an: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx
(Tipp: suche nach "Select(ed/ion)")

Und noch ein allgemeiner Tipp für die MSDN:
um nur die direkten Elemente einer Klasse (ohne die vererbten Elemente z.B. von Control) durchzuschauen, kann man im linken Baum unter "Constructor", "Methods", "Properties" oder "Events" den Knoten anklicken und man sieht diese dann als Unterelemente.

Ich selber benutze immer die lokale MSDN-Hilfe (noch vom VS 2008) und dort kann man dann explizit ganz oben anstatt "Member: Alle anzeigen", dann "Geschütze Member einschließen" und "Geerbte Member einschließen" deaktivieren (leider merkt es sich nicht diese Einstellung und man muß jedesmal diese CheckBoxen anklicken).

Um doch noch konkret auf deine Fragen zu antworten:
Die ListView kennt im Gegensatz zur ListBox (SelectionMode) nur die Einstellung "MultiSelect = true/false" - eine Alternative wäre evtl. die CheckBoxen zu aktivieren.

Und mittels SelectedItems.Clear bzw. SelectedItems.Add kannst du auch programmtechnisch die einzelnen Werte (de-)selektieren.