Autor |
Beitrag |
didiwerdau
      
Beiträge: 67
Win 2000
C# 2008 Express Edition
|
Verfasst: Do 02.04.09 14:17
Hallo zusammen,
ich möchte aus einer Listview beim anklicken eines Items dessen Text auslesen. Das funktioniert auch soweit, allerdings nur beim 1. markierten Element. Multiselect steht auf false und deshalb bin ich davon ausgegangen, dass ich immer mit selectedItems[0] auf das aktuell gewählte Item zugreifen kann. Beim zweiten markierten Item erhalte ich da aber eine Fehlermeldung, dass das Element 0 nicht existiert (InvalidArgument=Value mit dem Wert 0 ist für index ungültig.).
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void listView1_SelectedIndexChanged(object sender, EventArgs e) { XmlDocument anzeige = new XmlDocument(); anzeige.Load("\\\\gtfile\\Perkura\\bin\\jobs.xml"); foreach (XmlNode liste in anzeige.SelectSingleNode("Verarbeitungen")) { } textBox1.Text = listView1.SelectedItems[0].Text; } |
kann mir einer sagen, wie ich immer den richtigen index ermitteln kann?
Moderiert von Kha: Code- durch C#-Tags ersetzt
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 02.04.09 14:41
Die Hilfe sagt dazu:
Zitat: | When the user selects an item without pressing CTRL to perform a multiple selection, the control first clears the previous selection. In this case, this event occurs one time for each item that was previously selected and one time for the newly selected item.
|
Das Event wird also zweimal gefeuert. Wenn SelectedIndex == -1 ist, solltest du es einfach ignorieren.
_________________ >λ=
|
|
didiwerdau 
      
Beiträge: 67
Win 2000
C# 2008 Express Edition
|
Verfasst: Do 02.04.09 15:15
Danke für die Antwort.
Wieso der Fehler auftritt hab ich jetzt verstanden.
Leider bekomme ich es nicht hin den SelectedIndex abzufragen. Ich bekomme es bei der Autovervollständigng nirgends angezeigt. kannst du mir da noch weiter helfen?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 03.04.09 09:56
Oh, Sauerei *g* . Bei einem SelectedIndexChanged-Event bin ich stillschweigend auch von einer SelectedIndex-Property ausgegangen  . Dann machst du es eben direkt über SelectedItems: Wie könnte man dort nachprüfen, ob der Index 0 verfügbar ist?
_________________ >λ=
|
|
didiwerdau 
      
Beiträge: 67
Win 2000
C# 2008 Express Edition
|
Verfasst: Mo 20.04.09 12:03
Hallo,
ich möchte diesen Thread nochmal hervorkramen, da ich noch keine saubere Lösung gefunden habe. Hatte zwar eine Lösung, indem ich alles in try-catch gesetzt hatte und bei catch einfach nichts gemacht wurde.
jetzt habe ich eine neue Listview und da klappt das nicht. Es muß doch auch eine saubere Lösung für dieses Problem geben.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 20.04.09 13:21
Wenn meine Antwort wirklich so unverständlich war: SelectedItems.Count muss logischerweise > 0 sein, wenn du auf Item #0 zugreifen willst.
_________________ >λ=
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 20.04.09 13:22
Die Lösung ist doch ganz einfach:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| ListView listView = sender as ListView; if(listView.SelectedItems.Count > 0) { string text = listView.SelectedItems[0].Text; } |
Was ist daran jetzt schwierig gewesen?
|
|
didiwerdau 
      
Beiträge: 67
Win 2000
C# 2008 Express Edition
|
Verfasst: Mo 20.04.09 14:44
Sorry, ich glaube, ich habe hier einfach den richtigen Anstoß gebraucht. Hatte mich nur auf den Index konzentriert und nicht das passende gefunden.
Vielen Dank für eure Hilfe.
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Mi 22.04.09 18:04
Moin,
auch wenn das Thema als erledigt betrachtet werden kann, so darf ich dazu folgendes anmerken:
in dem o.a. Fall habe ich das mit einem anderen Event gelöst. Vorteil: hier habe ich gleich den Index des selektierten Items und auch das Item selbst, so dass ich nicht erst umständlich über die SelectedItemsCollection gehen muss:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| pivate void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if listView1.SelectedItems.Count > 0 ) {.... textBox1.Text = e.Item.Text; textBox1.Text = listView1.Items[e.ItemIndex].Text; } } } |
Gruss
Rainer
|
|