RichTextBox每行的背面颜色不同

时间:2013-04-04 11:23:21

标签: c# .net textbox richtextbox

我正在使用C#.Net开发一个Windows窗体应用程序。在我的部分代码中,我定义了一个记录系统事件的函数。这是这个函数的主体:

richTextBoxLog.Text += "-";
richTextBoxLog.Text += some logs and strings ...;
richTextBoxLog.Text += "." + new string(' ', 1000) + Environment.NewLine;
richTextBoxLog.Select(richTextBoxLog.GetFirstCharIndexFromLine(logCounter), richTextBoxLog.Lines[logCounter].Length);       
richTextBoxLog.SelectionBackColor = (logCounter % 2 == 0) ? Color.LightBlue: Color.LightGray;
logCounter++;
richTextBoxLog.ScrollToCaret();

logCounter的初始值为零(第一个事件的行指的是logCounter=0)。对于奇数行,背景颜色应为Color.LightGray,对于偶数行,它应为Color.LightBlue。但是,如下所示,它不会正确改变背面颜色。

First Event (Even color) Second Event (Odd color) Third Event (Even color) Fourth Event (Odd color) Fifth Event (Even color)

每次调用此函数(添加新文本行)时,richTextBoxLog.Select的区域将根据新行的开始和结束索引进行更新。但是当在文本框中添加偶数行时,所有前一行的背面颜色变为蓝色(甚至颜色)。

我提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

文档http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.selectionbackcolor.aspx声明:

  

从该位置输入的字符具有指定的SelectionBackColor。

这似乎可能会导致您的问题。虽然我仍然无法看到它如何影响以前添加的文字。

无论如何,您可以在添加文本时重新绘制所有线条颜色来解决它:

richTextBoxLog.Text += "-";
richTextBoxLog.Text += some logs and strings ...;
richTextBoxLog.Text += "." + new string(' ', 1000) + Environment.NewLine;
var lineCount = 0;
foreach (var line in richTextBoxLog.Lines) {
  richTextBoxLog.Select(richTextBoxLog.GetFirstCharIndexFromLine(lineCount), line.Length);
  richTextBoxLog.SelectionBackColor = (lineCount % 2 == 0) ? Color.LightBlue : Color.LightGray;
  lineCount++;
}
richTextBoxLog.ScrollToCaret();

答案 1 :(得分:0)

它应该是有用的:

    public  void AppendText(string text, Color color,Color backColor)
    {
        richTextBox1.SelectionStart = richTextBox1.TextLength;
        richTextBox1.SelectionLength = 0;
        richTextBox1.SelectionColor = color;
        richTextBox1.AppendText(text);
        richTextBox1.SelectionColor = richTextBox1.ForeColor;
        richTextBox1.SelectionBackColor = backColor;
        richTextBox1.ScrollToCaret();
    }