Richtextbox schreibt Text immer erst am Ende in das Textfeld

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Richtextbox schreibt Text immer erst am Ende in das Textfeld

    Hallo ich habe mal eine Frage zur Richttextbox.

    ich habe eine For Each Script was mir Zeilenweise eine Richtextbox füllen soll.
    Ich würde gerne jede Zeile einzeln sehen die dort geaddet wird.
    Bei mir wird der komplette Text erst am Ende des Scriptes in die Richtextbox gepastet.
    Bsp:

    For i = 0 to 10
    Richtextbox.Appendtext(i & vbNewLine)
    Next

    Wenn ich das auf einen BUtton lege und starte zeigt er nicht 1 dann 2 dann 3 sondern erstmal nichts und wenn das Script durch ist alles auf einmal an.
    In einer normalen Textbox funktioniert das, allerdings kann ich hier nicht für einzelnen Zeilen die Schriftfarbe ändern oder?
    Willkommen im Forum. :thumbup:

    IronStorm schrieb:

    der komplette Text
    wird schon angehängt, die Darstellung der RTB wird jedoch erst nach Beendigung der Routine refreshed. Wenn Du dies nach jeder Änderung tust, siehst Du immer, was los ist, auch wenn es länger dauert :!:

    VB.NET-Quellcode

    1. For i = 0 To 10
    2. RichTextBox1.AppendText(i & vbNewLine)
    3. RichTextBox1.Update()
    4. Next
    oder

    VB.NET-Quellcode

    1. For i = 0 To 10
    2. RichTextBox1.AppendText(i & vbNewLine)
    3. Next
    4. RichTextBox1.Update()
    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!

    IronStorm schrieb:

    Das erste Beispiel macht genau das was ich brauche :)
    Beim 2ten wird ja auch erst am Ende der For Schleife (Nach 10 durchläufen) ein Update gemacht.
    Tatsächlich ist hier ein Update überhaupt nicht nötig - weder in der Schleife, noch danach.
    Denn der Computer ist so schnell, dass niemals ein User es sehen können wird, wenn während der Schleifen-Durchläufe die Richtextbox geupdated wird.
    Hingegen bremst diese unnötige Updaterei den Vorgang gewaltig aus, vermutlich Faktor 1000.
    Was auch niemanden interessiert, denn auch der 1000-mal langsamere Vorgang ist immer noch schneller, als ein Mensch gucken kann.

    Aber generell sollte man es bleiben lassen, Oberflächen-Updating zu erzwingen. WinForms ist intelligent genug, das selbst sehr effizient zu bewerkstelligen, insbesondere, wenn man ihm nicht dazwischen-funkt.

    ErfinderDesRades schrieb:


    Aber generell sollte man es bleiben lassen, Oberflächen-Updating zu erzwingen. WinForms ist intelligent genug, das selbst sehr effizient zu bewerkstelligen, insbesondere, wenn man ihm nicht dazwischen-funkt.


    Dem Stimme ich voll und ganz zu.
    Zumal ich den Sinn dahinter nicht finde, warum der User es sehen sollte. Falls du eine Animation anstrebst, ist eine Schleife wie diese der falsche Weg.
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:

    IronStorm schrieb:

    zeile markieren und dann farbig ändern?
    So was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. AppendText("bla" & ControlChars.Lf, Color.Red)
    3. AppendText("bla bla" & ControlChars.Lf, Color.Green)
    4. AppendText("xxx" & ControlChars.Lf, Color.Blue)
    5. End Sub
    6. Private Sub AppendText(txt As String, col As Color)
    7. Dim start = RichTextBox1.TextLength
    8. Dim len = txt.Length
    9. RichTextBox1.AppendText(txt)
    10. RichTextBox1.SelectionStart = start
    11. RichTextBox1.SelectionLength = len
    12. RichTextBox1.SelectionColor = col
    13. End Sub
    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!