0

我正在使用 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。但是,正如您在下面看到的那样,它不会正确更改背面颜色。

第一个事件(均匀颜色) 第二个事件(奇怪的颜色) 第三个事件(均匀颜色) 第四次活动​​(奇怪的颜色) 第五事件(均匀颜色)

每次调用此函数(以添加新文本行)时,richTextBoxLog.Select都会根据新行的开始和结束索引更新区域。但是,当向文本框中添加偶数行时,所有先前行的背景颜色都会变为蓝色(偶数颜色)。

我提前感谢您的帮助。

4

2 回答 2

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();
于 2013-04-04T13:27:32.663 回答
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();
    }
于 2017-03-10T09:10:18.833 回答