Textfarbe in Richtextbox unterschiedlich setzen

Mantus666

Grünschnabel
Hey,
ich versuche gerade eine Art Chat in Vb .NEt 2005 über Sockets zu realisieren.
Ich schreibe dazu den geschriebenen Text und den empfangenen in eine Richtextbox.

Nun möchte ich das der Text unterschiedliche Farbe bekommt. Wie etwa in ICQ oder ähnlichen Programmen.

Bis jetzt habe ich das so gelöst:

Code:
If InStr(strMsg, TxtNick.Text.Trim, CompareMethod.Text) Then
        lngMsg = strMsg.Length
        lngSelStart = RichTextBox.Text.Length      'Cursorposition merken
        RichTextBox.SelectionLength = 0              'Nichts markieren
        RichTextBox.SelectionStart = lngSelStart  'Cursor Position ans ende des Textes 
        RichTextBox.SelectedText = strMsg                   'Den Text einfügen
        RichTextBox.SelectionStart = lngSelStart            'Cursorposition zurückstellen
        RichTextBox.SelectionLength = lngMsg               
        RichTextBox.SelectionColor = Color.Red              'Farbe setzen
        RichTextBox.SelectionLength = 0                     'Nichts markieren
        RichTextBox.SelectionStart = lngSelStart + lngMsg   'Cursor ans Ende
Else
        RichTextBox.Text = RichTextBox.Text & strMsg & vbCrLf
End If

Ich überprüfe also ob im auszugebenden Text der Nickname vorkommt. Wernn ja wird eine Farbe gesetzt. Kommt nun aber ein Text an der nicht den Nickname enthält setzt er die Farbe um. Allerdings nicht nur vom ankommenden Text sondern von der kompletten Richtextbox.

Wie kann ich das verhindern? Ich hoffe ich drücke mich einigermassen gut aus. :)

grüße
mantus666
 
Hi

Ich hatte so was vor geraumer Zeit mal gemacht. Vielleicht hilft dir das ja weiter:
C#:
richTextConversationHistory.AppendText( messageHeader + Environment.NewLine);
richTextConversationHistory.Select(richTextConversationHistory.Text.LastIndexOf(messageHeader), messageHeader.Length);
richTextConversationHistory.SelectionColor = Color.Gray;
richTextConversationHistory.SelectionFont = new Font(Font.FontFamily, 9, FontStyle.Bold);
richTextConversationHistory.AppendText("   " + talkData.Body + Environment.NewLine);
richTextConversationHistory.Select(richTextConversationHistory.Text.LastIndexOf(talkData.Body), talkData.Body.Length);
richTextConversationHistory.SelectionColor = Color.Black;
richTextConversationHistory.SelectionFont = new Font(richTextConversationHistory.Font.FontFamily, 8, FontStyle.Regular);
richTextConversationHistory.ScrollToCaret();
 
Zuletzt bearbeitet:
HEy,
erstmal danke für die Antwort.

Habe nun auch selber schon eine Lösung gefunden.
Einfach statt den Text so in die Textbox zu speichern auch mit hilfe von
Code:
lngMsg = strMsg.Length
        lngSelStart = RichTextBox.Text.Length      'Cursorposition merken
        RichTextBox.SelectionLength = 0              'Nichts markieren
        RichTextBox.SelectionStart = lngSelStart  'Cursor Position ans ende des Textes 
        RichTextBox.SelectedText = strMsg                   'Den Text einfügen
        RichTextBox.SelectionStart = lngSelStart            'Cursorposition zurückstellen
        RichTextBox.SelectionLength = lngMsg               
        RichTextBox.SelectionColor = Color.Red              'Farbe setzen
        RichTextBox.SelectionLength = 0                     'Nichts markieren
        RichTextBox.SelectionStart = lngSelStart + lngMsg   'Cursor ans Ende
den Text abspeichern und schon funktioniert es.

Allerdings muss man somit jeden Text der in die Box geschrieben wird so behandeln.
Was meiner Meinung nach etwas unpraktikabel ist.

Grüße
Mantus666
 

Neue Beiträge

Zurück