Benutzer mit den meisten Antworten
WPF Listbox - Es werden nicht alle Elemente ausgelesen

Frage
-
Hallo zusammen,
ich versuche mittels einer einfachen Schleife alle Listbox-Elemente auszulesen.
Leider klappt das nicht. Es werden immer nur die sichtbaren Elemente ausgelesen.
For i As Integer = Liste.Items.Count - 1 To 0 Step -1 Dim ListObject As Object = Liste.Items(i) Dim lbi As ListBoxItem = DirectCast(Liste.ItemContainerGenerator.
ContainerFromItem(ListObject), ListBoxItem) .....usw Next
Wie macht man sowas?
Dirk
Antworten
-
Dafür hast du 3 Möglichkeiten:
lb.SelectedItems.Clear() 'Vorherige Auswahl entfernen' lb.SelectedItems.Add(lb.Items(0)) 'Mehrere markieren' lb.SelectedItems.Add(lb.Items(1)) lb.SelectedItem = lb.Items(0) 'Einzelnes Item zuweisen' lb.SelectedIndex = 1 'Anhand des Index auswählen'
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 Dirk2006 Mittwoch, 19. Februar 2014 14:12
Alle Antworten
-
Hallo,
was genau hast du denn vor? Das einfachste wäre natürlich die Elemente in einer For Each Schleife durchzugehen:For Each item In lb.Items Debug.WriteLine(item) 'Item in die Ausgabe ausgeben' Next
Das geht natürlich auch mit For:For i = 0 To lb.Items.Count - 1 Debug.WriteLine(lb.Items(i)) 'Item in die Ausgabe ausgeben' Next
Die einzelnen Items sind vom Typ Objekt. Das sind eigentlich nur die Objekte, die du auch mit Add hinzugefügt hast:
lb.Items.Add("Item")'Item ist ein String'
also kannst du einfach mit ToString oder einem Cast an das Item heran kommen:
lb.Items.Add(New ListBoxItem() with { .Content="Item 2" })'Item ist ein ListBoxItem'Dim lbItem = CType(item, ListBoxItem) 'Cast, item stammt aus der for each Schleife' Debug.WriteLine(lbItem.Content) 'Ausgabe
Wenn deine ListBox gebunden ist, so sind die einzelnen Elemente vom Typ, der in der Auslistung ist. Bei einer List(Of T) würdest du also T als Objekt erhalten.
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. -
Danke für die schnelle Hilfe.
Mir ist schon klar, wie ich die Listbox durchlaufen kann. Problem ist, dass bei dem oben angezeigtem Beispiel nicht
alle Elemente angezeigt werden.
Ich möchte in einer Schleife die selektierten Elemente auslesen. Wichtig ist, dass ich sowohl auf die selektierten als
auch auf die unselektierten Elemente Zugriff habe.
Die Listbox ist an eine Table gebunden.
Wie macht man das?
Dirk
-
Hallo,
von den selektierten Items hast du oben nichts geschrieben.Was du genau vor hast weiß ich noch immer nicht, weswegen meine Antwort bei den Schleifen bleibt.
Die SelectedItems-Eigenschaft gibt dir eine Liste mit ausgewählten Einträgen. Dadurch kannst du heraus finden welche Items ausgewählt sind:
For Each item In lb.Items If (lb.SelectedItems.Contains(item)) Then Debug.WriteLine("Markiert " & item.ToString()) 'Item in die Ausgabe ausgeben' Else Debug.WriteLine("Nicht markiert:" & item.ToString()) End If Next
Du kannst aber auch direkt die SelectedItems-Liste in einer Schleife durchlaufen. Dort gilt das selbe wie für die Items-Auflistung.
Items enthält auch alle Elemente, wenn die listBox über ItemsSource gebunden ist. Die befüllungsart macht also keinen Unterschied.
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. -
Dafür hast du 3 Möglichkeiten:
lb.SelectedItems.Clear() 'Vorherige Auswahl entfernen' lb.SelectedItems.Add(lb.Items(0)) 'Mehrere markieren' lb.SelectedItems.Add(lb.Items(1)) lb.SelectedItem = lb.Items(0) 'Einzelnes Item zuweisen' lb.SelectedIndex = 1 'Anhand des Index auswählen'
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 Dirk2006 Mittwoch, 19. Februar 2014 14:12