更快地在C#中为RichTextBox中的所有出现添加颜色
我有一个RichTextBox,并且有大约1000次出现的指定搜索字符串。
我使用以下函数为所有出现的颜色着色:
public void ColorAll(string s)
{
rtbxContent.BeginUpdate();
int start = 0, current = 0;
RichTextBoxFinds options = RichTextBoxFinds.MatchCase;
start = rtbxContent.Find(s, start, options);
while (start >= 0)
{
rtbxContent.SelectionStart = start;
rtbxContent.SelectionLength = s.Length;
rtbxContent.SelectionColor = Color.Red;
rtbxContent.SelectionBackColor = Color.Yellow;
current = start + s.Length;
if (current < rtbxContent.TextLength)
start = rtbxContent.Find(s, current, options);
else
break;
}
rtbxContent.EndUpdate();
}
但我发现它很慢。
但是,如果我为同一文本中出现次数较少的另一个单词的所有出现着色,我发现它非常快。
所以我认为缓慢来自(这两行可能涉及UI刷新):
rtbxContent.SelectionColor = Color.Red;
rtbxContent.SelectionBackColor = Color.Yellow;
是否有更快的方法来完成相同的工作,例如,我在内存中进行着色,然后我一次性显示结果?
我能说清楚吗?
谢谢。
没有找到相关结果
已邀请:
4 个回复
课刊灭似
有了这个:
由于您已计算出等于start + s.Length的电流 您还可以存储s.Length是一个变量,因此您不需要每次都计算字符串中的所有字符。 rtbxContent.TextLength也是如此。
醒荒捆府绣
咖哀烈
方法很慢,也许你可以使用第三方工具来搜索你。您所需要的只是字符串中模式的索引。 也许这会对你有所帮助。你应该计算差异并使用更快的差异。
递劝臼类洪