为WinForm的RichTextBox控件设置指定行的文字颜色

首次发布:2026-01-06
/// <summary>
/// 给RichTextBox指定行设置文字颜色
/// </summary>
/// <param name="rtb">目标RichTextBox控件</param>
/// <param name="lineIndex">行号(从0开始计数)</param>
/// <param name="color">要设置的颜色</param>
public void SetRichTextBoxLineColor(RichTextBox rtb, int lineIndex, Color color)
{
    // 边界校验:行号超出范围则直接返回
    if (rtb.Lines.Length == 0 || lineIndex < 0 || lineIndex >= rtb.Lines.Length)
    {
        return;
    }

    // 1. 获取指定行的第一个字符索引
    int lineStart = rtb.GetFirstCharIndexFromLine(lineIndex);

    // 2. 计算指定行的最后一个字符索引
    int lineEnd;
    if (lineIndex == rtb.Lines.Length - 1)
    {
        // 如果是最后一行,结束位置为文本末尾
        lineEnd = rtb.Text.Length;
    }
    else
    {
        // 非最后一行,结束位置为下一行首字符索引 - 1
        lineEnd = rtb.GetFirstCharIndexFromLine(lineIndex + 1) - 1;
    }

    // 3. 选中当前行的文本(仅后台选中,界面无视觉选中效果)
    rtb.SelectionStart = lineStart;
    rtb.SelectionLength = lineEnd - lineStart + 1;

    // 4. 设置选中区域的文字颜色
    rtb.SelectionColor = color;

    // 5. 取消选中(将光标移到文本末尾,避免界面显示选中状态)
    rtb.SelectionStart = rtb.Text.Length;
    rtb.SelectionLength = 0;
}

方法调用

SetRichTextBoxLineColor(richTextBox1, 0, Color.Red);       // 第0行(第一行)红色

从方法中可以看出,同一行也可以设置多个颜色,只要设置选中开始到尾的文字,方法如下

//选中当前行的文本(仅后台选中,界面无视觉选中效果)
rtb.SelectionStart = lineStart;
rtb.SelectionLength = lineEnd - lineStart + 1;

//设置选中区域的文字颜色
rtb.SelectionColor = color;

本文来自 www.luofenming.com