我正在使用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
的区域将根据新行的开始和结束索引进行更新。但是当在文本框中添加偶数行时,所有前一行的背面颜色变为蓝色(甚至颜色)。
我提前感谢您的帮助。
答案 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();
}