Schleife durchlaufen

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Schleife durchlaufen

    Eine Folge von Werten wir der MessageBox übergeben:

    VB.NET-Quellcode

    1. Dim MyArray() As String = New String() {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}
    2. For i As Integer = 0 To MyArray.GetUpperBound(0)
    3. MessageBox.Show(MyArray(i))
    4. Next
    5. Ich habe es so versucht:
    6. [vbnet]
    7. For Each MyArray In New List(Of String)(ListBox1.SelectedItems.OfType(Of String)())
    8. For i As Integer = 0 To MyArray.GetUpperBound(0)
    9. MessageBox.Show(MyArray(i))
    10. Next
    11. Next


    [/vbnet]

    Im obigen Beispiel werden die Werte im Code vorgegeben.
    Wie geht es das die Werte aus einem ListBoxItem übernommen werden?
    "GetUpperBound" funktioniert nicht.

    Ein paar Stunden später:

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For i = 1 To ListBox1.Items.Count
    3. MessageBox.Show(+i.ToString())
    4. Next


    Ich brauche aber den Content der ListBoxItem nicht Count. Wie geht das?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thomas2705“ ()

    Hallo @Thomas2705!

    Da ich sehe, dass du bereits seite 2009 dabei bist und dich auch mit WPF ein wenig auseinander gesetzt hast, denke ich mal, dass dir der Begriff DatenBindung (oder englisch: DataBinding) etwas sagt.

    Deswegen: Verwende besser eine (generische) Implementation von IEnumerable(Of T). Dafür wüde sich die altbekannte List(Of T) eignen. Diese kannst du dann über eine Zwischeninstanz BindingSource and deine ListBox binden. Vorteil davon: Wenn sich deine ursprünliche Liste ändert (Wert hinzu-/wegkommt, Liste komplett ändert (sprich: Neue Instanz), ein Fehler (beim Binden) auftritt,...), dann kannst du das über Events erkennen und behandeln. Außerdem bist du typensicher(er) unterwegs.
    Hier ein kleines Beispiel:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Linq
    3. Imports System.Collections.Generic
    4. Public Class Form1
    5. Private WithEvents bs As BindingSource
    6. Private valueList As List(Of Integer)
    7. Public Sub New()
    8. InitializeComponent()
    9. Me.valueList = New List(Of Integer)()
    10. Me.bs = New BindingSource()
    11. AddHandler Me.bs.DataSourceChanged, AddressOf Me.bs_DataSourceChanged
    12. End Sub
    13. Private Sub bs_DataSourceChanged(sender As Object, e As EventArgs)
    14. Me.ListBox1.DataSource = Me.bs
    15. End Sub
    16. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    17. Me.valueList = Enumerable.Range(1, 10).ToList()
    18. Me.bs.DataSource = Me.valueList
    19. End Sub
    20. End Class


    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell