2011-09-22 54 views
1

我有一個富文本框,併爲其實施了搜索選項。當用戶搜索字符串時,所有匹配都會以黃色背景突出顯示。我希望當用戶再次按下搜索按鈕時,在新的搜索開始之前,所有以前的亮點都將被刪除。從富文本框中的多個位置刪除背色

我發現了兩種方式來做到這一點: 1.選擇所有文字,然後選擇背景色是默認的。 2.刪除文本框中的所有文本,然後再放回去。

這兩種方式的工作,但是當我使用它們看起來不自然。 那麼,有沒有另外一種方法可以刪除文本中的所有亮點?

我使用.NET Framework 4和我在C#編寫。

回答

-1

這裏的部分是寫在半C#psedocode的想法希望它有助於

List<Match> matches = new List<Match> { }; 


void Highlight(string SearchString,Color highlightColor) 
{ 
foreach (var match in matches) 
{ 
UpdateMatchBgColor(richTextBox1,match.pos,match.length,match.color); 
} 
matches = SearchMatches(SearchString); 

foreach (var match in matches) 
{ 
UpdateMatchBgColor(richTextBox1,match.pos,match.length,highlightColor); 
} 

} 

編輯: 嘗試這樣的: http://www.dotnetcurry.com/ShowArticle.aspx?ID=146 EDIT2:

作品真棒!

+0

我希望有一個更簡單的方法,但我想沒有,所以我會寫一些類似的東西,謝謝。 – Guy

+0

@Guy喜的傢伙,如果在stackoverflow中的答案可以幫助你,你應該把它標記爲有用(1up),如果它解決了你的問題,你應該將它作爲選定的答案 – Nahum

+1

在聲望1,他不能投票,但標記爲答案會很好 – slawekwin

0

你正在尋找的功能是多重選擇,是這樣的:

richTextBox1.Select(4, 5); 
richTextBox1.Select(29, 2); 
richTextBox1.Select(95, 12); 

,但仍然有選擇的先前的選擇。

壞消息,因爲多選擇不是內置的功能RichTextBox的,但我想你可能會做一些技巧來達到這一點:

選擇一部分進行選擇突出(後使其正常取消選擇時)和錄製開始&結束索引,並與第二和第三多的同...

希望它可以幫助

0

試試這個代碼:

richTextBox1.SelectAll(); 
richTextBox1.SelectionBackColor = System.Drawing.Color.White; 
richTextBox1.DeselectAll(); 

這裏白色將是文字的背景色,然後纔會慢慢有黃色高亮

0

有一個很簡單的解決方案,以消除你已經創建亮點的多個實例不會干擾所有其他高光,其他格式等:

使用獨特的高光顏色沒有人可能會使用例如

hColor as color = Color.FromArgb(255, 255, 1) 

然後從你的富文本使用刪除亮點的所有實例在顏色:

Dim t As String = TextBox1.Rtf 
t = t.Replace("\red255\green255\blue1;", "\red255\green255\blue255;") 
TextBox1.Rtf = t 

這將替換您的特殊高亮顏色相同的顏色作爲背景,在這種情況下Color.FromArgb(255, 255,255),而不必搜索任何突出顯示的詞或實現任何其他代碼。

再見亮點...