在RichTextBox中添加更多文本并突出显示时,它将清除所有以前的突出显示

时间:2019-08-11 02:49:33

标签: c# winforms richtextbox

我正在制作一个调试/日志表单,该表单将在特定时间保存其他表单中完成的所有操作:例如按下按钮,在文本框中输入一些信息等。

在每一行中,我突出显示与当天相对应的实际时间,例如,今天是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);
}

程序将搜索■和=,如果日期相同,则在其内部将用DarkKhaki颜色突出显示;如果未在同一日期,则将用OrangeRed颜色突出显示。

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

  

编辑:我尝试不保存 xk int变量,但是当我调用此函数时,程序需要再次处理所有文本,并开始闪烁直到选中所有文本。

1 个答案:

答案 0 :(得分:0)

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

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

现在我使用命令[.appendtext]可以正常工作!

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