Färben von Wörtern in richtextbox

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Xylon.

    Färben von Wörtern in richtextbox

    hallo.Ich möchte gerne für mein kleines Programm die funktion haben,dass bestimmte Worte in einer Richtextbox eingefärbt werden.

    Gibt es dafür eine möglichkeit?Ich habe getestet mit KeyPreview und einer Abfrage.Das hatte auch funktioniert aber wenn man weiterschreiben wollte wurde das gefärbte Wort wieder gelöscht.Ich habe so ziemlich keine Ahnung wie ich das umsetzen kann und google spuckt nichts brauchbares aus.

    Hat einer eine Idee oder einen Code mit dem ich Wörter in der Richtextbox färben kann?WICHTIG ist dabei: Wärend des schreibens eines Textes

    Thorstian schrieb:

    Wörter in der Richtextbox färben
    So:

    VB.NET-Quellcode

    1. Dim index = RichTextBox1.Text.IndexOf("bla")
    2. RichTextBox1.SelectionStart = index
    3. RichTextBox1.SelectionLength = 3 ' "bla".Length
    4. RichTextBox1.SelectionColor = Color.Red
    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!

    Thorstian schrieb:

    wird das Wort gelöscht
    Dann hast Du eine unklare Problembeschreibung gepostet.

    VB.NET-Quellcode

    1. Dim pos = RichTextBox1.SelectionStart ' merken
    2. Dim index = RichTextBox1.Text.IndexOf("bla")
    3. RichTextBox1.SelectionStart = index
    4. RichTextBox1.SelectionLength = 3 ' "bla".Length
    5. RichTextBox1.SelectionColor = Color.Red
    6. RichTextBox1.SelectionStart = pos ' restaurieren
    7. RichTextBox1.SelectionLength = 0
    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!
    Ich hatte mal das gleiche Problem, und bin dabei auf eine Funktion gestoßen, die erleichtert das ungemein, besonders wenn du mehrere Wörter färben willst.

    VB.NET-Quellcode

    1. Private Sub ColorWords(ByVal RTB As RichTextBox, ByVal word As String, ByVal color As Color)
    2. Dim Reg As System.Text.RegularExpressions.MatchCollection
    3. Dim Match As System.Text.RegularExpressions.Match
    4. Dim pattern As String = "[\s]" + word
    5. Dim currentline As Integer = RTF.GetFirstCharIndexOfCurrentLine
    6. currentline += RTF.Lines(RTF.GetLineFromCharIndex(currentline)).Length
    7. Reg = Regex.Matches(LCase(RTF.Text), LCase(pattern))
    8. For Each Match In Reg
    9. RTB.Select(Match.Index, Match.Length)
    10. RTB.SelectionColor = color
    11. RTB.Select(currentline, 0)
    12. RTB.SelectionColor = color.Black
    13. Next
    14. RTB.SelectionColor = color.Black
    15. End Sub


    So kannst du ganz einfach das Wort und die Farbe mit einer Zeile färben. Ist natürlich nichts im Vergleich zum richtigen Syntax Highlighting, aber ist schon ganz okay. Hier kannst du bei der "Pattern" Variable dann auch auswählen, ob zum beispiel (wie hier) nur Wörter, die nach einem Leerzeichen kommen, gefärbt werden.
    @Xylon:: Dein Code würde wesentlich besser aussehen, wenn Du den alten VB6-Ranz rausschmeißt.
    Nimm mal den Microsoft.VisualBasic-Verweis aus Deinem Projekt raus.
    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!
    @RodFromGermany: Joa aber dann kommt das alles irgendwie durcheinander, keine Ahnung was ich falsch mache, aber dann wird anstatt das Wort auch die Textstellen in der RTB gefärbt.

    Vielleicht hab ich es auch falsch verstanden?

    VB.NET-Quellcode

    1. Private Sub ColorWords(ByVal rtb As RichTextBox, ByVal word As String, ByVal color As Color)
    2. Dim matchc As MatchCollection = Regex.Matches(rtb.Text.ToLower(), word.ToLower())
    3. For Each m As Match In matchc
    4. rtb.Select(m.Index, m.Length)
    5. rtb.SelectionColor = color
    6. rtb.Select(rtb.Text.Length, 0)
    7. rtb.SelectionColor = Drawing.Color.Black
    8. Next
    9. rtb.SelectionColor = Drawing.Color.Black
    10. End Sub


    @Thorstian: Ja, Regular Expressions.

    Xylon schrieb:

    irgendwie durcheinander
    Dieser Code ist nicht jener Code.
    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!