代码之家  ›  专栏  ›  技术社区  ›  Sani Berkovic

如何将RichTextbox着色函数扩展到字符串的颜色部分?

  •  0
  • Sani Berkovic  · 技术社区  · 2 年前
    private void ColorRichTextbox(RichTextBox box, string text, Color color)
    {
        int length = MyRichTextBox.TextLength;
        if (!string.IsNullOrWhiteSpace(MyRichTextBox.Text))
        {
            MyRichTextBox.AppendText("\r\n" + text);
        }
        else
        {
            MyRichTextBox.AppendText(text);
        }
        MyRichTextBox.SelectionStart = length;
        MyRichTextBox.SelectionLength = text.Length;
        MyRichTextBox.SelectionColor = color;
    }
    

    用法:

    ColorRichTextbox(MyRichTextBox,
                        "This is example : " + DateTime.Now, Color.Red);
    

    结果是一行红色,由“This is example:”和 DateTime.Now 部分有没有办法让“这就是例子”这个部分变成白色和白色 约会时间。现在 穿红色衣服?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Visual Vincent    2 年前

    如果修改方法使文本不总是强制在自己的行上,可以调用它两次——首先是白色文本,然后是红色文本:

    private void ColorRichTextbox(RichTextBox box, string text, Color color, bool appendNewLine = true)
    {
        int length = box.TextLength;
        if (!string.IsNullOrWhiteSpace(box.Text) && appendNewLine)
        {
            box.AppendText("\r\n" + text);
        }
        else
        {
            box.AppendText(text);
        }
        box.SelectionStart = length;
        box.SelectionLength = text.Length;
        box.SelectionColor = color;
    }
    

    通过设置 appendNewLine false ,输入的文本将不会被放在单独的行中,因此在上一次通话结束时继续:

    ColorRichTextbox(MyRichTextBox, "This is example : ", Color.White);
    ColorRichTextbox(MyRichTextBox, DateTime.Now.ToString(), Color.Red, false); // false = Don't write this text on a separate line
    

    旁注: 你似乎没有使用 box 你方法的论证。如果你想将其用于多个RichTextBox,你应该替换 MyRichTextBox 具有 在您的方法中(这已在我上面的代码中完成)。

    结果:

    Example screenshot