C# RichTextBox每行的背面颜色不同
我正在使用C.Net开发一个windows窗体应用程序。在我的部分代码中,我定义了一个记录系统事件的函数。以下是此函数的主体:C# RichTextBox每行的背面颜色不同,c#,.net,textbox,richtextbox,C#,.net,Textbox,Richtextbox,我正在使用C.Net开发一个windows窗体应用程序。在我的部分代码中,我定义了一个记录系统事件的函数。以下是此函数的主体: richTextBoxLog.Text += "-"; richTextBoxLog.Text += some logs and strings ...; richTextBoxLog.Text += "." + new string(' ', 1000) + Environment.NewLine; richTextBoxLog.Select(richTextBoxL
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的区域都会根据新行的开始和结束索引进行更新。但是,在文本框中添加偶数行时,前面所有行的背景色都会变成蓝色偶数
我提前感谢您的帮助。文档说明:
从该位置输入的字符具有指定的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();
文件规定:
从该位置输入的字符具有指定的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();
这应该是有益的:
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();
}
这应该是有益的:
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();
}