Color Richtextbox

  • VB.NET
  • .NET (FX) 1.0–2.0

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

    Color Richtextbox

    Hallo,

    Ich möchte in meiner Richtextbox durch jede zeile loopen, und sollte sie
    mit "[ --" anfangen UND mit "-- ]" aufhören, dann will ich das sie eingefärbt wird.
    Mein Ansatz:

    VB.NET-Quellcode

    1. Public Sub ColorTitles()
    2. For Each i As Integer In RichTextBox1.Lines
    3. Dim Text As String = RichTextBox1.Lines(i)
    4. RichTextBox1.Select(RichTextBox1.GetFirstCharIndexFromLine(i), Text.Length)
    5. RichTextBox1.SelectionColor = ColorForLine(Text)
    6. Next
    7. End Sub
    8. Private Function ColorForLine(Line As String) As Color
    9. If (Line.StartsWith("[ --")) & (Line.EndsWith("-- ]")) Then
    10. Return Color.Green
    11. End If
    12. End Function


    Das Problem:



    Wie behebe ich diese Problem, bzw. setze ich mein vorhaben am besten um?
    C# Developer
    Learning C++
    Ich weiß jetzt nicht genau was den Fehler verursacht, versuch es aber mal statt einem "&" in der If-Bedingung unten mit einem "AndAlso" oder versuch mal folgene Möglichkeit:

    VB.NET-Quellcode

    1. For i As Integer = 0 To richTextBox1.Lines.Length - 1
    2. If richTextBox1.Lines(i).StartsWith("[ --") AndAlso richTextBox1.Lines(i).EndsWith("-- ]") Then
    3. richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(i), richTextBox1.Lines(i).Length)
    4. richTextBox1.SelectionColor = Color.Green
    5. End If
    6. Next
    Hier liegt der Fehler.

    Rikudo schrieb:

    VB.NET-Quellcode

    1. For Each i As Integer In RichTextBox1.Lines

    i ist ein Integer, RichTextBox1.Lines ist ein String-Array.
    Fang bitte sofort an mit Option Strict On.
    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!
    Edit: Es gibt doch ein Problem. Wenn sich die Titel über mehrere Zeilen erstrecken dann werden seltsamerweise auch Abschnitte gehighlited obwohl sie kein [ - - haben. Das heißt eigentlich müsste ich immer bis zum nächsten fund von [-- bzw - -] färben. Wie mach ich das am besten?
    C# Developer
    Learning C++

    Rikudo schrieb:

    Wie mach ich das am besten?
    Ersetze die Funktion RichTextBox1.GetFirstCharIndexFromLine() durch eigenen Code:

    VB.NET-Quellcode

    1. Public Sub ColorTitles()
    2. Dim pos As Integer = 0
    3. For i = 0 To RichTextBox1.Lines.Length - 1
    4. Dim Text As String = RichTextBox1.Lines(i)
    5. RichTextBox1.Select(pos, Text.Length)
    6. pos += Text.Length + 1
    7. RichTextBox1.SelectionColor = ColorForLine(Text)
    8. Next
    9. End Sub
    ------
    Das Einfügen von Code ist auch nicht mehr das, was es mal war.
    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!