在富文本框中突出显示花费的时间太长
本文关键字:时间 显示 文本 | 更新日期: 2023-09-27 18:34:56
我有大量的偏移量列表,我需要在我的RichTextBox中突出显示。但是,此过程花费的时间太长。我正在使用以下代码:
foreach (int offset in offsets)
{
richTextBox.Select(offset, searchString.Length);
richTextBox.SelectionBackColor = Color.Yellow;
}
有没有更有效的方法?
更新:
尝试使用此方法,但它没有突出显示任何内容:
richTextBox.SelectionBackColor = Color.Yellow;
foreach (int offset in offsets)
{
richTextBox.Select(offset, searchString.Length);
}
我用谷歌搜索了你的问题,我发现 RichTextBox 在有很多行时变得非常慢。
在我看来,您要么购买了第三方控件,它可以对其性能感到满意,要么可能需要线程来设计整个选择任务。我认为他们可以加快速度。
希望对您有所帮助!
我以前遇到过同样的问题。 我最终忽略了他们给你的所有方法,并操纵了底层的RTF数据。 此外,第二个代码块不起作用的原因是 RTF 会应用格式,因此如果您调用函数(在本例中为 Property(来更改选择颜色,它只会将其应用于当前选定的块。 在该调用之后对选择所做的任何更改都将变得无关紧要。
您可以使用 RGB 值,或者这里是有关如何在 RTF 控件中执行不同操作的重要来源。 在你的代码中弹出这个函数,看看它的效果如何。 我用它来为 SQL 代码提供实时语法突出显示。
public void HighlightText(int offset, int length)
{
String sText = richTextBox.Text.Trim();
sText = sText.Insert(offset + length - 1, @" 'highlight0");
sText = sText.Insert(offset, @" 'highlight1");
String s = @"{'rtf1'ansi'deff0{'fonttbl{'f0'fnil'fcharset0 Courier New;}}
{'colortbl ;'red255'green255'blue0;}'viewkind4'uc1'pard";
s += sText;
s += @"'par}";
richTextBox.Rtf = s;
}
如果在循环之外设置 SelectionBackColor 有什么区别吗?
查看带有反射器的 RichTextBox 显示,每次设置颜色时都会向控件发送 WindowMessage。在大量偏移的情况下,这可能会导致一次又一次地突出显示已突出显示的单词,从而导致 O(n^2( 行为。