簡體   English   中英

在RichTextBox中突出顯示需要太長時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM