2016-08-15 7 views
0

Arbeits Ich habe eine Listbox, die aus einer txt-Datei mit diesem Code geladen x Menge Objekt hat:VB.NET für jede Schleife nicht

Dim lines() As String = IO.File.ReadAllLines(Application.StartupPath() + "\file.txt") 
    List.Items.AddRange(lines) 

    Try 
     List.SelectedIndex = 0 
    Catch ex As Exception 

    End Try 

    Return True 

Er lädt sie in Ordnung. Dann habe ich nur eine Schleife versuchen, durch sie wie folgt aus:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Dim num As Integer = 0 
    Dim item As Object 

    For Each item In List.Items 
     List.SelectedIndex = num 
     num += 1 
    Next 

End Sub 

Der Fehler, den ich bekommen, ist dies:

Eine nicht behandelte Ausnahme des Typs ‚System.InvalidOperationException‘ aufgetreten in System.Windows.Forms.dll

Weitere Informationen: Die Liste, an die dieser Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn sich die Liste nicht ändert.

Ich habe versucht, das Listenfeld manuell zu laden, hat nicht geholfen. Irgendwelche Hilfe hier?

+1

Was versuchen Sie mit dieser Schleife zu erreichen? – Fairy

+0

Nur um den ausgewählten Index zu ändern. @Fairy – T1mpp4

+0

Verwenden Sie niemals einen leeren Try-Catch. Es verbirgt Probleme. – LarsTech

Antwort

1

Verwenden

For num = 0 To List.Items.Count - 1 
     List.SelectedIndex = num 
    Next 

Und wie @CodyGray Recht darauf hingewiesen,: Der Grund dafür ist ein foreach-Schleife nicht verwendet werden kann, wenn Sie die Sammlung von Gegenständen über Sie Aufzählen ändern werden.

Dies wird mit dem letzten ausgewählten Element enden, so dass es nur wirklich von Nutzen ist, wenn Sie Ihre Event-Handler für jedes Element testen.

+2

Sie sollten erklären, warum Sie dies tun müssen. Mit anderen Worten, * warum * Ihre Lösung behebt das Problem. (Eine for-each-Schleife kann nicht verwendet werden, wenn Sie die Auflistung von Elementen ändern möchten, über die Sie aufzählen.) –