RIchTextBox -> über mehrere Zeilen einen Text Farbig darstellen lassen

  • VB.NET

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

    RIchTextBox -> über mehrere Zeilen einen Text Farbig darstellen lassen

    Hallo Leute,
    ich würde gerne wissen, ob und wie es möglich ist, einen in einer RichTextBox dargestellten Text, für ein paar Zeilen lang Farbig darzustellen (Farbe aus ColorDialog).
    Etwa so:

    (hoffentlich) Rich TextBox schrieb:

    Dieser Text ist Rot.
    Dieser auch.
    Dieser hier ist Blau.
    Der auch.
    und der auch.
    Und dieser hier ist wieder schwarz.
    Ist das irgentwie möglich?

    mfg
    programm-macher

    VB.NET-Quellcode

    1. Rtb.SelectionStart = Index1
    2. Rtb.SelectionLength = Index2
    3. Rtb.SelectionColor = Color.Blue

    Rtb.SelectionStart ist die Cursorposition, wenn Du diese mit Maus oder Tastatur setzt, musst Du nur noch Rtb.SelectionLength setzen.
    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!
    Und wie der Sinn macht. :D

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim MyText As String
    3. MyText = "ölasf ösdfl äsdfgklöjsdgt klöj"
    4. MyText &= "MyColorStart"
    5. MyText &= " lkadfvlökaj löksjg ölksdfjg"
    6. MyText &= "MyColorEnd"
    7. MyText &= " rölksjdfvökls ökladfjlök.l-sdjk löksj "
    8. Rtb.Text = MyText
    9. Rtb.SelectionStart = MyText.IndexOf("MyColorStart")
    10. Rtb.SelectionLength = MyText.IndexOf("MyColorEnd") + "MyColorEnd".Length - Rtb.SelectionStart
    11. Rtb.SelectionColor = Color.Blue
    12. Rtb.SelectionStart = 0
    13. Rtb.SelectionLength = 0
    14. 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!
    selbe Form, 3 Button
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim MyText As String
    4. MyText = "ölasf ösdfl äsdfgklöjsdgt klöj"
    5. MyText &= "MyColorStart"
    6. MyText &= " lkadfvlökaj löksjg ölksdfjg"
    7. MyText &= "MyColorEnd"
    8. MyText &= " rölksjdfvökls ökladfjlök.l-sdjk löksj "
    9. Rtb.Text = MyText
    10. Rtb.SelectionStart = MyText.IndexOf("MyColorStart")
    11. Rtb.SelectionLength = MyText.IndexOf("MyColorEnd") + "MyColorEnd".Length - Rtb.SelectionStart
    12. Rtb.SelectionColor = Color.Blue
    13. Rtb.SelectionStart = 0
    14. Rtb.SelectionLength = 0
    15. End Sub
    16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    17. Rtb.SelectionStart = 17
    18. Rtb.SelectionLength = 20
    19. Rtb.SelectionColor = Color.Red
    20. Rtb.SelectionStart = 0
    21. Rtb.SelectionLength = 0
    22. End Sub
    23. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    24. Rtb.SelectionStart = 47
    25. Rtb.SelectionLength = 20
    26. Rtb.SelectionColor = Color.Green
    27. Rtb.SelectionStart = 0
    28. Rtb.SelectionLength = 0
    29. End Sub
    30. End Class
    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!
    OK. Danke erstmal.
    Geht es auch irgentwie, dass man staht eine Zahl auch eine TextBox nehmern kann. Also etwa so:

    VB.NET-Quellcode

    1. Dim MyText As String
    2. MyText = "Blub" & Textbox1.Text
    3. MyText &= "Blabla" & TextBox2.Text
    4. Form3.RichTextBox1.Text = MyText
    5. Form3.RichTextBox1.SelectionStart = MyText.IndexOf("Blub")
    6. Form3.RichTextBox1.SelectionLength = MyText.IndexOf(TextBox1.Text) + TextBox1.Text.Length - Form3.RichTextBox1.SelectionStart
    7. Form3.RichTextBox1.SelectionColor = ColorDialog1.Color
    8. Form3.RichTextBox1.SelectionFont = FontDialog1.Font
    9. Form3.RichTextBox1.SelectionStart = 0
    10. Form3.RichTextBox1.SelectionLength = 0
    11. Form3.RichTextBox1.SelectionStart = MyText.IndexOf("Blabla")
    12. Form3.RichTextBox1.SelectionLength = MyText.IndexOf(TextBox2.Text) + TextBox2.Text.Length - Form3.RichTextBox1.SelectionStart
    13. Form3.RichTextBox1.SelectionColor = ColorDialog2.Color
    14. Form3.RichTextBox1.SelectionFont = FontDialog2.Font
    15. Form3.RichTextBox1.SelectionStart = 0
    16. Form3.RichTextBox1.SelectionLength = 0


    Beim ersten funktioniert es, doch wenn ich das noch einmal mache gibt es bei mir folgenden Fehler:

    Microsoft VisualStudio 2010 schrieb:

    nvalidArgument=Value mit dem Wert -12 ist für SelectionLength ungültig.
    Parametername: SelectionLength
    Am besten, Du machst die Indexrechnung separat und testest, ob gültige Werte drin stehen:
    RTB.SelectionStart >= 0 And RTB.SelectionStart < RTB.Text.Length
    RTB.SelectionLength >= 0 And RTB.SelectionLength <= RTB.Text.Length - RTB.SelectionStart
    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!