Próbuję pokolorować części ciągu, które mają zostać dołączone do RichTextBox. Mam ciąg zbudowany z różnych ciągów.
string temp = "[" + DateTime.Now.ToShortTimeString() + "] " +
userid + " " + message + Environment.NewLine;
Tak wyglądałaby wiadomość po jej skonstruowaniu.
[21:23] Użytkownik: moja wiadomość tutaj.
Chcę, aby wszystko w nawiasach [9:23] i łącznie z nimi miało jeden kolor, „użytkownik” miał inny kolor, a komunikat - innym kolorem. Następnie chciałbym, aby ciąg został dołączony do mojego RichTextBox.
Jak mogę to osiągnąć?
Odpowiedzi:
Oto metoda rozszerzenia, która przeciąża
AppendText
metodę parametrem koloru:A tak byś tego użył:
Zwróć uwagę, że możesz zauważyć migotanie, jeśli wyświetlasz dużo wiadomości. Zobacz ten artykuł C # Corner, aby zapoznać się z pomysłami na zmniejszenie migotania RichTextBox.
źródło
box.Text += mystring
i wszystkie kolory zniknęły. Kiedy zastąpiłem tobox.AppendText(mystring)
, działało jak urok.AppendText(string text)
z WinFormsRozszerzyłem metodę o czcionkę jako parametr:
źródło
To jest zmodyfikowana wersja, którą umieściłem w swoim kodzie (używam .Net 4.5), ale myślę, że powinna też działać na 4.0.
Różnice w stosunku do oryginału:
źródło
Myślę, że modyfikowanie „zaznaczonego tekstu” w RichTextBox nie jest właściwym sposobem dodawania kolorowego tekstu. Oto metoda dodawania „bloku koloru”:
Z MSDN :
Więc myślę, że musisz podzielić swój ciąg w zależności od koloru części i stworzyć tyle
Run
obiektów, ile potrzeba.źródło
Na mnie to działa! Mam nadzieję, że Ci się przyda!
źródło
Wybierając tekst tak, jak ktoś powiedział, może to na chwilę pojawić się. W
Windows Forms applications
nie ma innych rozwiązań dla problemu, ale dziś znalazłam zły, pracy, sposób rozwiązania: można umieścićPictureBox
w nakładających się doRichtextBox
na zrzut ekranu z if, podczas selekcji i zmiany koloru lub czcionki, robiąc to po pojawią się ponownie po zakończeniu operacji.Kod jest tutaj ...
Lepiej jest użyć WPF; to rozwiązanie nie jest idealne, ale dla Winform działa.
źródło
źródło
Korzystanie z Selection w WPF, agregowanie z kilku innych odpowiedzi, żaden inny kod nie jest wymagany (z wyjątkiem wyliczenia Severity i funkcji GetSeverityColor)
źródło
Utworzyłem tę funkcję po wyszukaniu informacji w Internecie, ponieważ chciałem wydrukować ciąg XML po wybraniu wiersza z widoku siatki danych.
i tak to nazywasz
źródło