RichTextBox 文字列のさまざまな部分に色を付ける 質問する

RichTextBox 文字列のさまざまな部分に色を付ける 質問する

RichTextBox に追加される文字列の一部に色を付けようとしています。異なる文字列から構築された文字列があります。

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

メッセージが構築されると、次のようになります。

[午後9時23分] ユーザー: ここに私のメッセージがあります。

括弧 [9:23] 内のすべてを 1 つの色にし、「ユーザー」を別の色にし、メッセージを別の色にします。次に、文字列を RichTextBox に追加します。

どうすればこれを実現できるでしょうか?

ベストアンサー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#コーナーRichTextBox のちらつきを軽減する方法についてのアイデアについては、この記事をご覧ください。

おすすめ記事