【问题标题】:When adding more text into a RichTextBox and highlighting, it clears all previous highlights当向 RichTextBox 添加更多文本并突出显示时,它会清除所有以前的突出显示
【发布时间】:2019-08-11 02:49:33
【问题描述】:

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

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

Example 1

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

Example 2

下面我放了它解释这个的代码: CMD = 富文本框

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);
}

程序搜索■和=,里面如果是同一个日期会用深卡其色高亮,否则用橙红色高亮。

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

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

【问题讨论】:

  • 我建议您重新考虑如何执行此操作。不要在追加一行后通过处理所有文本来突出显示文本,而是在追加时格式化该行。
  • 您确定在您未显示的代码中没有任何地方会更改 rtb.Text 吗?结果看起来很像这样..
  • @TaW 我只在以另一种形式执行某些操作时更改 rtb.text,之后我调用此函数来突出显示这一天,但会出现此问题。
  • 我..将 rtb.text 更改为另一种形式 这通常会弄乱以前的格式。所以在不更改文本的情况下调用函数两次时会出现问题吗介于两者之间?你如何改变文字?可以出示一下代码吗?

标签: c# winforms richtextbox


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2011-08-06
    • 2011-08-31
    • 2017-03-07
    • 2020-12-24
    • 2020-11-12
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多