none
WPF Listbox - Es werden nicht alle Elemente ausgelesen RRS feed

  • 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

    Dienstag, 18. Februar 2014 18:48

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
    Mittwoch, 19. Februar 2014 13:21
    Moderator

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'
    lb.Items.Add(New ListBoxItem() with { .Content="Item 2" })'Item ist ein ListBoxItem'
    also kannst du einfach mit ToString oder einem Cast an das Item heran kommen:
    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.

    Dienstag, 18. Februar 2014 19:35
    Moderator
  • 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

    Mittwoch, 19. Februar 2014 11:34
  • 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.

    Mittwoch, 19. Februar 2014 11:57
    Moderator
  • Danke.  Das klappt endlich.

    Und wie kann ich jetzt ein Element selektieren?

    Mittwoch, 19. Februar 2014 13:16
  • 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
    Mittwoch, 19. Februar 2014 13:21
    Moderator
  • Super!

    Dank Dir.

    Mittwoch, 19. Februar 2014 14:11