当向 RichTextBox 添加更多文本并突出显示时,它会清除所有以前的突出显示

When adding more text into a RichTextBox and highlighting, it clears all previous highlights

我正在制作一个 debug/log 表单,用于保存在特定时间在其他表单中完成的所有操作:例如按下按钮、在文本框中输入一些信息等。

在每一行中我突出显示对应于同一天的实际时间,例如,今天是 10/08/2019 所以:

Example 1

10/08/2019 对应实际日期,因此突出显示。问题是,当我做另一件事时,比如按 L 按钮,它显示如下:

Example 2

下面我把解释这个的代码放在下面: CMD = RichTextBox

private void ChequearDatos()
{
    string line = CMD.Text;
    int x = xk, xx = 0, lent = 0;
    lent = line.Length;

    do
    {
        else if (line[x] == '\n')
        {
            xk = x;                   
            x++;
        }

        else if (line[x] == '■')
        {
            xx = x + 1;
            do
            {
                xx = xx + 1;
            }
            while (line[xx] != '=');
            string pedazo = line.Substring(x + 2, (xx - x) - 12);
            if (pedazo == Convert.ToString(DateTime.Today.Day + "/" + DateTime.Today.Month + "/" + DateTime.Today.Year))
            {
                CMD.SelectionStart = x;
                CMD.SelectionLength = xx - x + 1;
                CMD.SelectionColor = System.Drawing.Color.OrangeRed;
            }
            else
            {
                CMD.SelectionStart = x;
                CMD.SelectionLength = xx - x + 1;
                CMD.SelectionColor = System.Drawing.Color.DarkKhaki;
            }
            CMD.SelectionStart = CMD.TextLength;

            CMD.ScrollToCaret();
            if (xx + 1 > lent) { break; }
            else { x = xx + 1; } 
        }
        else { x = x + 1; }
    }
    while (x <= lent - 1);
}

程序搜索■和=,里面如果是相同的日期会用深卡其色高亮显示,如果不是则用橙红色高亮显示。

在第一个 运行 中,它 运行 很好,但是当我添加更多文本并再次调用该函数时,它会以白色突出显示除最后一条消息之外的所有内容。

Edit: I tried without saving the xk int variable, but when I call this function the program needs to process all the text again and starts to blink until checked all of it.

我像@TnTinMin 说的那样修复了它,在我调用这个函数之前,另一个函数在 RTB 中写入如下:

void PrintRTB(string a)
{
  RTB.text += "■ " +  a + "\n";
  ChequearDatos();
}

现在我使用命令 [.appendtext] 并且有效!

void PrintRTB(string a)
{
  RTB.AppendText("■ " + a + "\n");
  ChequearDatos();
}