Timer&Schleife

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Timer&Schleife

    Hallo,
    ich versuche als Links aus meiner Listbox nacheinander im WebBrowser zu öffnen.
    Es soll nach jedem TimerTick der nächste Link genommen werden. Jedoch nimmt er bei meiner Variante immer den selben Link. Wie schaffe ich es
    bei jedem Tick i um 1 zu erhöhen?!
    Vielen Danke :)

    Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. For i = ListBox1.Items.Count - 1 To 0 Step -1
    3. WebBrowser1.Navigate(ListBox1.Items(i))
    4. Next
    Sinnvoller wäre es, das ganze einfach mit einer "Static"-Variable zu machen: Eine als "Static"-deklarierte Variable vergisst nicht, sobald das Programm aus dem Schutzbereich ´raus ist. Klassenweit deklarieren macht eigentlich nur Sinn, wenn man die Variable auch noch in anderen Prozeduren benötigt. Aber das ganze musst du eh ganz anders gestalten, sonst kann das nicht funktionieren...

    Hab dir das mal eben schnell hingekritzelt, wie das funktionieren müsste (nicht getestet)

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Static listBoxEintraege As Queue(Of String) 'Die Queue eignet sich für so etwas hervorragend
    3. If listBoxEintraege Is Nothing Then 'Wenn es noch keine Queue gibt, dann...
    4. listBoxEintraege = New Queue(Of String) '...neue Queue erzeugen...
    5. For Each eintrag As Object In ListBox1.Items
    6. listBoxEintraege.Enqueue(DirectCast(eintrag, String)) '...und diese mit den Items aus der Listbox füllen.
    7. Next
    8. End If
    9. If listBoxEintraege.Count > 0 Then 'Wenn in meiner Queue jetzt noch nicht herausgenommene Webseiten liegen...
    10. WebBrowser1.Navigate(listBoxEintraege.Dequeue) 'eine Website aus der Liste nehmen und ansurfen.
    11. Else
    12. listBoxEintraege = Nothing 'Wenn alle EInträge abgeklappert sind, den Verweis auf die Liste löschen
    13. Timer1.stop
    14. End If
    15. End Sub

    Falls du noch fragen hast, meld dich einfach.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Enixus“ ()

    ErfinderDesRades schrieb:

    richtig
    Wozu brauchst Du eine Schleife, wenn Du pro Tick nur einen Link auswerten willst?
    Du benötigst lediglich einen prozedur-extern Index, das Handling

    VB.NET-Quellcode

    1. Index += 1
    2. If (Index >= MaxIndex) Then
    3. Index = 0
    4. ' und/oder
    5. Timer1.Enabled = False
    6. End If
    packst Du mit in die Tick-Routine
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!