Problem mit for next schleife

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Fire88.

    Problem mit for next schleife

    hey VBler

    ich habe ein kleines Problem, ich habe folgenden Code, der soll den thread in einer for next schleife durchlaufen lassen. es geht eig. auch, nur wen ich 5 eingebe zählt es nicht hoch, sondern ladet und dan steht nur noch 5 da.
    wo habe ich hier den Fehler in der Schleife?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Threading
    3. Imports System.Web
    4. Public Class Form1
    5. Shared link As String
    6. Shared hit As Integer
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. link = TextBox1.Text.ToString
    9. hit = TextBox2.Text
    10. WebBrowser1.Navigate(link)
    11. Threading.Thread.Sleep(1000)
    12. For i = 1 To hit
    13. Threading.Thread.Sleep(800)
    14. WebBrowser1.Refresh()
    15. Label2.Text += 1
    16. Next
    17. MessageBox.Show("Erfolgreich")
    18. End Sub
    19. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    20. WebBrowser1.Dispose()
    21. Me.Close()
    22. End Sub
    23. End Class
    Ohne weitere Einzelheiten zu kennen und mit Option Strict On
    läuft bei mir folgender Code, der auf Deinem basiert:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Threading
    3. Imports System.Web
    4. Public Class Form1
    5. Shared link As String
    6. Shared hit As Integer
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. link = TextBox1.Text
    9. hit = CInt(TextBox2.Text)
    10. WebBrowser1.Navigate(link)
    11. Threading.Thread.Sleep(1000)
    12. For i = 0 To hit - 1
    13. Threading.Thread.Sleep(800)
    14. WebBrowser1.Refresh()
    15. Label2.Text = i.ToString
    16. Label2.Refresh() ' dies hier
    17. Next
    18. MessageBox.Show("Erfolgreich")
    19. End Sub
    20. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    21. WebBrowser1.Dispose()
    22. Me.Close()
    23. End Sub
    24. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    25. TextBox2.Text = "10"
    26. End Sub
    27. End Class

    Für weitere Fragen solltest Du ein paar Einzelheiten erläutern.
    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!
    hmm okey, die funktion die ich mir gewünscht habe geht so wie du es hier zeigst.

    nur verstehe ich nicht ganz wo mein fehler wahr in der schleife.

    ich hatte ja

    VB.NET-Quellcode

    1. For i = 1 To hit
    2. Threading.Thread.Sleep(800)
    3. WebBrowser1.Refresh()
    4. Label2.Text += 1
    5. Next


    und du hast gemacht

    VB.NET-Quellcode

    1. For i = 0 To hit - 1
    2. Threading.Thread.Sleep(800)
    3. WebBrowser1.Refresh()
    4. Label2.Text = i.ToString
    5. Label2.Refresh() ' dies hier
    6. Next

    ich verstehe nicht ganz warum hinter hit -1 sein muss.

    wen hit 10 ist dan sag ich ja von 0 to 10 -1 (sry, versteh die logik nicht) aber laufen tut es auf die weise.


    vielen dank

    Rinecamo schrieb:

    Wenn du 10 hinschreibst, läuft die Schleife 11 mal.
    Anders gesagt (bzw. dargestellt):

    Quellcode

    1. 0
    2. 1
    3. 2
    4. 3
    5. 4
    6. 5
    7. 6
    8. 7
    9. 8
    10. 9
    11. 10


    ^this

    das ist mi klar, nur was bedeutet den das was ich geamcht habe mit " For i = 1 To hit " ?

    hit= 10

    das ist ja auch i ist von 1 bis 10 (oder ist es auf meine art ohne schrittweise?)

    mfg
    Ob die Schleife von {1 bis n} oder von {0 bis (n-1)} läuft, ist in diesem Beispiel egal.
    Sobald Du aber ein Feld adressieren willst, musst Du die schleife von {0 bis (n-1)} laufen lassen, um alle Feldelemente zu erwischen.
    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!