RichTextBox - SelectionColor

  • VB.NET

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

    RichTextBox - SelectionColor

    Hi,
    ich versuche grade Texte mit verschiedenen Farben in eine RichTextBox einzufügen, aber hab ein kleines Problem beim Setzen der Farbe. Hier mal mein Code:

    VB.NET-Quellcode

    1. Private Counter As Integer = 0
    2. Private Sub Button1_Click(...)
    3. Counter += 1
    4. Select Case Counter
    5. Case 1
    6. AddMessage("ABC", Color.Blue)
    7. Case 2
    8. AddMessage("DEF", Color.Green)
    9. Case 3
    10. AddMessage("GHI", Color.Red")
    11. Counter = 0
    12. End Select
    13. End Sub
    14. Private Sub AddMessage(ByVal Text As String, ByVal Color As Color)
    15. Select Case RichTextBox1.TextLength
    16. Case 0
    17. RichTextBox1.AppendText(Text)
    18. RichTextBox1.SelectionStart = RichTextBox1.Find(Text)
    19. RichTextBox1.SelectionColor = Color
    20. Case Else
    21. RichTextBox1.AppendText(vbNewLine & Text)
    22. RichTextBox1.SelectionStart = RichTextBox1.Find(Text)
    23. RichTextBox1.SelectionColor = Color
    24. End Select
    25. End Sub

    Das Problem ist nun, dass die ersten drei mit der richtigen Farbe eingefügt werden, aber danach ändert sich die Farbe nicht mehr. Also "ABC" wird blau eingefügt, "DEF" grün, "GHI" rot und danach wird alles mit rot eingefügt, den Fehler finde ich jedoch nicht..
    ich würde sagen wenn du 2 mal "ABC" drin hast dann findet RichTextBox1.Find(Text) nur den ersten und nimmt nicht den zweiten

    edit: ich würdes so machen

    VB.NET-Quellcode

    1. Private Sub AddMessage(ByVal Text As String, ByVal Color As Color)
    2. Select Case RichTextBox1.TextLength
    3. Case 0
    4. RichTextBox1.AppendText(Text)
    5. RichTextBox1.SelectionStart = RichTextBox1.TextLength - Text.Length
    6. RichTextBox1.SelectionLength = Text.Length
    7. RichTextBox1.SelectionColor = Color
    8. Case Else
    9. RichTextBox1.AppendText(vbNewLine & Text)
    10. RichTextBox1.SelectionStart = RichTextBox1.TextLength - Text.Length
    11. RichTextBox1.SelectionLength = Text.Length
    12. RichTextBox1.SelectionColor = Color
    13. End Select
    14. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bluespide“ ()

    ist nicht die beste lösung aber dürfte klappen,kann man ja umbauen ^^

    VB.NET-Quellcode

    1. RichTextBox1.Text = "Hallo ich bin es Hallo wer bist du Hallo"
    2. Dim sucheNach As String = "Hallo"
    3. Dim StartIndex As Int32 = 0
    4. While RichTextBox1.Text.IndexOf(sucheNach, StartIndex) >= 0
    5. RichTextBox1.SelectionStart = RichTextBox1.Text.IndexOf(sucheNach, StartIndex)
    6. RichTextBox1.SelectionLength = sucheNach.Length
    7. RichTextBox1.SelectionColor = Color.Blue
    8. StartIndex = RichTextBox1.Text.IndexOf(sucheNach, StartIndex) + sucheNach.Length
    9. End While


    Lg.
    Nsjdvv
    so gehts:

    VB.NET-Quellcode

    1. Private Counter As Integer = 0
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Counter += 1
    4. Select Case Counter
    5. Case 1
    6. AddMessage("ABC", Color.Blue)
    7. Case 2
    8. AddMessage("DEF", Color.Green)
    9. Case 3
    10. AddMessage("GHI", Color.Red)
    11. Counter = 0
    12. End Select
    13. End Sub
    14. Private Sub AddMessage(ByVal Text As String, ByVal Color As Color)
    15. Dim derzeit As Integer = RichTextBox1.TextLength
    16. Select Case RichTextBox1.TextLength
    17. Case 0
    18. RichTextBox1.AppendText(Text)
    19. RichTextBox1.SelectionStart = RichTextBox1.Find(Text)
    20. RichTextBox1.SelectionColor = Color
    21. Case Else
    22. RichTextBox1.AppendText(vbNewLine & Text)
    23. RichTextBox1.SelectionStart = RichTextBox1.Find(Text, derzeit, RichTextBoxFinds.MatchCase)
    24. RichTextBox1.SelectionColor = Color
    25. End Select
    26. End Sub

    mfg.skyscater
    Ich würde SelectionStart und SelectionLength explizit zuweisen, und nicht Richtextbox.Find benutzen (von dem ich nicht recht weiß, wasses macht, und wies sich auf die SelectionLength auswirkt).

    Jdfs: In AddMessage - Case 0 - ich sehe auch nicht, dass das jemals angesprungen würde