当向 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();
}
我正在制作一个 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();
}