Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RichTextBox每行的背面颜色不同_C#_.net_Textbox_Richtextbox - Fatal编程技术网

C# RichTextBox每行的背面颜色不同

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

我正在使用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的区域都会根据新行的开始和结束索引进行更新。但是,在文本框中添加偶数行时,前面所有行的背景色都会变成蓝色偶数

我提前感谢您的帮助。

文档说明:

从该位置输入的字符具有指定的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();
    }