2012-05-21 46 views
6

我有一大串偏移量需要在我的RichTextBox中突出顯示。然而,這個過程需要很長時間。我正在使用下面的代碼:在RichTextBox中突出顯示的時間太長了

foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
    richTextBox.SelectionBackColor = Color.Yellow; 
} 

有沒有更有效的方法來做到這一點?

UPDATE:

用這種方法嘗試,但它並沒有什麼突出:如果你設置的SelectionBackColor循環外

richTextBox.SelectionBackColor = Color.Yellow; 
foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
} 
+0

對不起,我沒有意識到這個問題是關於winforms的。我會刪除我的答案,讓您的問題再次無法解答。 – dasblinkenlight

+0

無論如何感謝@dasblinkenlight – user1135357

+0

[RichTextBox語法實時高亮顯示功能的重複 - 禁用重繪](http://stackoverflow.com/questions/3282384/richtextbox-syntax-highlighting-in-real-time-disabling-the -repaint) –

回答

0

這有什麼區別?

用Reflector調查RichTextBox顯示,每次設置顏色時都會將WindowMessage發送到控件。在大量偏移的情況下,這可能導致突出顯示已經突出顯示的單詞,從而導致O(n^2)行爲。

+0

已經嘗試過。這不會突出顯示任何內容: 'richTextBox.SelectionBackColor = Color.Yellow; foreach(偏移量中的int偏移) { richTextBox.Select(offset,searchString.Length); }' – user1135357

1

我已經使用你的問題,我發現RichTextBox變得很慢,當有很多行。
在我看來,你要麼購買第三方控制,你可以通過它的表現來滿足,或者你可能需要線程去完成整個選擇任務。我認爲他們可以加快速度。
希望它有幫助!

+0

我想這[控制](http://www.telerik.com/products/winforms/richtextbox.aspx)將解決我的問題 – user1135357

+0

我聽到很多有關telerik和devexpress控件的好消息。所以不要猶豫,向他們揭露你的問題,並看看他們能爲你提供什麼解決方案。 – HichemSeeSharp

+0

如果您最終得到上述解決方案之一,請將其標記爲答案。 – HichemSeeSharp

1

我以前有過這個相同的問題。我最終忽視了他們給你的所有方法,並操縱了底層的RTF數據。此外,你的第二塊代碼不起作用的原因是RTF應用格式化,所以如果你調用一個函數(或在這種情況下的屬性)來改變選擇顏色,它將只適用於當前選定的塊。該調用後對選擇所做的任何更改都將變爲無效。

你可以玩弄RGB值或here is a great source關於如何在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; 
    } 
+0

對不起,我並不完全理解你的代碼,但是我試圖將你的代碼複製並粘貼到我的應用程序中,並在每次我想突出顯示某些內容時都調用此方法,但它沒有根本不工作。無論如何,感謝您的幫助。我放棄! – user1135357

相關問題