c# - 为 RichTextBox 字符串的不同部分着色

标签 c# string winforms colors richtextbox

我正在尝试为要附加到 RichTextBox 的字符串部分着色。我有一个由不同字符串构建的字符串。

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

这就是消息构造后的样子。

[9:23pm] User: my message here.

我希望方括号 [9:23] 内的所有内容(包括方括号 [9:23])为一种颜色,“用户”为另一种颜色,消息为另一种颜色。然后我想要将字符串附加到我的 RichTextBox。

我怎样才能做到这一点?

最佳答案

这是一个用颜色参数重载 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();

请注意,如果您输出大量消息,您可能会注意到一些闪烁。参见 this C# Corner有关如何减少 RichTextBox 闪烁的想法的文章。

关于c# - 为 RichTextBox 字符串的不同部分着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1926264/

相关文章:

c# - 如何在 CTOR 中使用 StructureMap 处理基本类型

c# - linq投影元素计数

java - 如何将包含字符转义序列的字符串转换为 char?

string - 有什么办法可以判断两个字符串是否在 Go 中共享内存?

c# - 通过 ActionFilter 检查 session 是否存在

c# - 通过对象字段搜索 ObservableCollection

c++ - 如何使用 C++ 替换字符串之间的更新值?

c# - 如何让控件重绘 Windows 窗体?

c# - 启动时隐藏表单

c# - 从数据库中删除选定的数据表行