/ / RichTextBox - Dodaj tekst do góry wieloma kolorami (wyświetla się tylko najnowsza linia) - c #, logowanie, kolory, richtextbox

RichTextBox - Dodaj tekst do góry z wieloma kolorami (wyświetlana jest tylko najnowsza linia) - c #, rejestrowanie, kolory, richtextbox

Próbuję replikować okno dziennika, więc najnowszy dziennik powinien pojawić się u góry - najbardziej widoczny. Dlatego muszę dodać tekst na górze (bez problemu), ale z wieloma kolorami (problem).

Najpierw przechowuję oryginalny tekst. (to rtf lub tekst - wypróbowałem oba) A potem dodaję nowy tekst z nazwą użytkownika, a następnie wiadomością. Nazwa użytkownika powinna mieć jeden kolor, a komunikat inny. Zawsze jest też pojedynczo podszyty.

Dzięki mojej metodzie otrzymuję tylko to, że kiedy dołączam stary tekst lub stary tekst RTF, wyświetla się tylko najnowszy „log”.

public void AddLog(Log log)
{
try
{
string oldText = this.richTextBox1.Rtf;

this.richTextBox1.Text = log.User + ": " + log.Message + "n";
this.richTextBox1.Select(0, log.User.Length);
this.richTextBox1.SelectionColor = Color.GreenYellow;
this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
this.richTextBox1.SelectionColor = Color.White;
this.richTextBox1.DeselectAll();
this.richTextBox1.Rtf += oldText;

}
catch { }
}

Czy to w ogóle możliwe? Ponieważ nie zapisuje starego tekstu RTF, a stary tekst RTF nie może zostać dołączony po nowym tekście, co oznacza, że ​​prawdopodobnie muszę dodać najnowszy tekst, poniżej którego nie chcę.

Jeśli zamiast zapisać tekst „RTF”, format (kolory) zniknie i pokaże tylko jeden kolor.

Odpowiedzi:

2 dla odpowiedzi № 1

Nie przetestowano, ale spróbuj tego

public void AddLog(Log log)
{
try
{
richTextBox1.SelectAll();
string oldText = this.richTextBox1.SelectedRtf;

this.richTextBox1.Text = log.User + ": " + log.Message + "n";
this.richTextBox1.Select(0, log.User.Length);
this.richTextBox1.SelectionColor = Color.GreenYellow;
this.richTextBox1.Select(log.User.Length + 2, log.Message.Length);
this.richTextBox1.SelectionColor = Color.White;
this.richTextBox1.DeselectAll();
this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
this.richTextBox1.SelectedRtf = oldText;
this.richTextBox1.DeselectAll();

}
catch { }
}