Цветные различные части строки RichTextBox

Я пытаюсь окрасить части строки, которая будет добавлена к RichTextBox. Мне создали строку из различных строк.

string temp = "[" + DateTime.Now.ToShortTimeString() + "] " +
              userid + " " + message + Environment.NewLine;

Это - то, на что было бы похоже сообщение, после того как оно создается.

[21:23] Пользователь: мое сообщение здесь.

Я хочу, чтобы все в и включая скобки [9:23] было одним цветом, 'пользователь', чтобы быть другим цветом и сообщением, чтобы быть другим цветом. Затем я хотел бы строку, добавленную к моему RichTextBox.

Как я могу выполнить это?

104
задан Winger Sendon 16 October 2015 в 23:16
поделиться

1 ответ

Вот метод расширения, который перегружает метод AppendText параметром цвета:

public static class RichTextBoxExtensions
{
    public static void AppendText(this RichTextBox box, string text, Color color)
    {
        box.SelectionStart = box.TextLength;
        box.SelectionLength = 0;

        box.SelectionColor = color;
        box.AppendText(text);
        box.SelectionColor = box.ForeColor;
    }
}

И вот как вы можете его использовать:

var userid = "USER0001";
var message = "Access denied";
var box = new RichTextBox
              {
                  Dock = DockStyle.Fill,
                  Font = new Font("Courier New", 10)
              };

box.AppendText("[" + DateTime.Now.ToShortTimeString() + "]", Color.Red);
box.AppendText(" ");
box.AppendText(userid, Color.Green);
box.AppendText(": ");
box.AppendText(message, Color.Blue);
box.AppendText(Environment.NewLine);

new Form {Controls = {box}}.ShowDialog();

Обратите внимание, что вы можете заметить некоторое мерцание, если вы вывод большого количества сообщений. См. эту статью C # Corner для получения идей о том, как уменьшить мерцание RichTextBox.

230
ответ дан 24 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: