[英]Highlighting in a RichTextBox is taking too long
我有一個很大的偏移列表,我需要在我的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應用格式,所以如果你調用一個函數(在這種情況下是屬性)來改變選擇顏色,它只會將它應用於當前選擇的塊。 在該調用之后對選擇所做的任何更改都將變得無關緊要。
您可以使用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會有什么不同嗎?
查看帶有Reflector的RichTextBox顯示,每次設置顏色時都會向控件發送一個WindowMessage。 在大量偏移的情況下,這可能導致一次又一次地突出顯示已經突出顯示的單詞,導致O(n ^ 2)行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.