Schleife mit Timer steuern

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Kaktus-Stecher.

    Schleife mit Timer steuern

    Hallo Community!

    Habe mal wieder eine Frage, weil ich mal wieder nicht weiter weiß :)
    Ich versuche grad den Timer zu lernen.

    Und zwar habe ich in meiner Form 3 Richboxtext-Elemente und ein Button. Mit dem Button kann ich eine angelegte Liste in Richboxtext1 laden. Dabei sieht der Inhalt der Liste so aus "Wort1:Wort2" , "Wort3:Wort4". Split etc. habe ich auch gelernt und kann das auch recht gut anwenden. Daher wird gesplittet und Wort1 und Wort3 in Richboxtext2 geladen und Wort2 und Wort4 in Richboxtext3.
    Nun möchte ich noch den Timer verwenden. Und zwar soll jede Zeile nach einem bestimmten Intervall eingetragen werden.

    Habe eine globale Zählvariable "i". Habe die If-, While- und die For-Schleife versucht. Habe dann beim Timer-Event "i +=1" benutzt, um die Zählvariable um 1 zu erhöhen, nur klappt das leider irgendwie nicht :(

    Hat jemand eine Idee für mich? :)
    Klaro.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public username As String
    3. Public password As String
    4. Public i As Integer = 0
    5. Public Sub DatenHolen()
    6. Try
    7. Dim openfile As New OpenFileDialog
    8. openfile.Filter = "(*.txt)|*.txt"
    9. If openfile.ShowDialog = System.Windows.Forms.DialogResult.OK Then
    10. Dim openstring As String() = IO.File.ReadAllLines(openfile.FileName)
    11. Dim anzahl As Integer = openstring.Count()
    12. '___________________________________________
    13. 'For i = 0 To anzahl - 1
    14. While i <> anzahl - 1
    15. Dim username_zeile As String = openstring(i)
    16. Dim passwort_zeile As String = openstring(i)
    17. Dim v As Object = Split(username_zeile, ":")
    18. username = v(0)
    19. Dim t As Object = Split(passwort_zeile, ":")
    20. password = t(1)
    21. RichTextBox2.Text &= username & vbCrLf
    22. RichTextBox3.Text &= password & vbCrLf
    23. 'i +=1
    24. End While
    25. 'Next
    26. '___________________________________________
    27. RichTextBox1.Text = ""
    28. For Each line As String In openstring
    29. RichTextBox1.Text &= line & vbCrLf
    30. Next
    31. End If
    32. Catch
    33. MessageBox.Show("FEHLER")
    34. End Try
    35. End Sub
    36. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    37. DatenHolen()
    38. Timer1.Start()
    39. End Sub
    40. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    41. i += 1
    42. End Sub
    43. End Class



    Das ist bisher alles, was ich habe.
    was soll das für einen Sinn ergeben, mit dem Timer?

    Er glaubt, DatenHolen würde in der Schleife so vor sich hinmachen, irgendwann würde der Timer gestartet und wenn der Timer dann i erhöht geht es weiter. Und wenn er zuerst den Timer starten und dann DatenHolen aufrufen würde, könnte es sogar theoretisch klappen.

    @Kaktus-Stecher (tut das nicht weh?):
    Zieh in Daten holen nur die Sachen in RichTextbox1 und starte den Timer. In den Timer kommt dann die Programmlogik für das Aufsplitten und in die restlichen Boxen packen, sowie das Hochzählen von i. Natürlich musst Du passend zum i dann auch die richtige Box mit dem richtigen Inhalt füllen.

    Aber hey: I lol'd. Und das auf einen Freitag. Gut gemacht :)
    Ansonsten aber noch einmal das Prinzip der Nebenläufigkeit durchgehen und vor allen Dingen was passiert, wenn man eben keine Nebenläufigkeit hat.

    Gruß FatFire
    @jvbsl: der timer steuert doch die intervalle oder net, und wenn ich jede Sekunde eine Zeile einlesen will, muss ich die doch wohl benutzen.

    @FatFire: freut mich, dass du an einem Freitag, den 13., über einen Anfänger lol'en konntest :)
    Bin halt kein Pro und habe bewusst hingeschrieben, dass ich um Hilfe bete. Ich würd ja wohl nicht um Hilfe bitten, wenn ichs könnte ;)
    Und so wie du es geschrieben hast, in den Timer die Programmlogik habe ich auch versucht, aber ich habe es nicht hinbekommen.
    Ich werde es jetzt noch einmal versuchen
    Okay, ich hatte mal ein wenig Langeweile, ich denke, es tut das, was Du wolltest:

    VB.NET-Quellcode

    1. Dim ActiveLine As Integer
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim openfile As New OpenFileDialog
    4. openfile.Filter = "(*.txt)|*.txt"
    5. If openfile.ShowDialog = System.Windows.Forms.DialogResult.OK Then
    6. RichTextBox1.Lines = IO.File.ReadAllLines("D:\test.txt")
    7. ' Vorbereitungen zum Auseinanderschnippeln
    8. ActiveLine = 0
    9. RichTextBox2.Clear()
    10. RichTextBox3.Clear()
    11. Timer1.Enabled = True
    12. End If
    13. End Sub
    14. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    15. If ActiveLine < RichTextBox1.Lines.Length Then
    16. ' Aktive Zeile zerlegen
    17. Dim SplittedLine As String()
    18. SplittedLine = RichTextBox1.Lines(ActiveLine).Split(":")
    19. ' Auf Textboxen verteilen
    20. RichTextBox2.AppendText(SplittedLine(0) & Environment.NewLine)
    21. RichTextBox3.AppendText(SplittedLine(1) & Environment.NewLine)
    22. ' Zeiger auf nächste Zeile setzen
    23. ActiveLine += 1
    24. Else
    25. ' Wenn keine Zeilen übrig, Timer abschalten
    26. Timer1.Enabled = False
    27. End If
    28. End Sub

    über einen Anfänger lol'en konntest :)
    Bin halt kein Pro und habe bewusst hingeschrieben, dass ich um Hilfe bete. Ich würd ja wohl nicht um Hilfe bitten, wenn ichs könnte ;)

    Ähm, das war von mir nicht böse gemeint. Eher so wie wenn ein Kind gerade Essen lernt und dabei seinen kompletten Hochstuhl und sich selbst einsaut. Man ist weder sauer noch hält man das Kind für dumm...es ist einfach total süss...okay...das könntest Du jetzt auch in den falschen Hals kriegen.
    Also glaub mir einfach wenn ich sage: es war nicht böse gemeint und ich hoffe, ich konnte helfen.

    Gruß FatFire
    Ich danke dir vielmals für den Code. Werde ich gleich Zeile für Zeile durchgehen, damit ichs auch verstehe! :)
    Und wegen dem lol'en und dem Freitag :P ich habs nur halt leicht "böse" interpretiert, halt bisschen negativ. Aber wenn du sagst, so war das nicht gemeint, dann glaub ich dir das!
    Danke nochmals!
    Gruß,
    kaktus