2014-12-02 72 views
0

我目前有一個用來顯示長字符串的富文本框。我使用下面的代碼來選擇字符串中'重要'項目的列表以粗體顯示。richtextbox.find並選擇重複文本

foreach (string item in selectionList) 
{ 
    if (item.Length != 0) 
    { 
      int charStart = richTextBox.Find(item); 
      richTextBox.SelectionFont = selectedFont; 
      richTextBox.Select(charStart, item.Length); 
    } 
} 

我想知道如果出現在文本中的重複項的最有效方法。例如。 (本示例中突出顯示大寫的文本)「我想訂購一些BURGERS,CHIPS和CHIPS」

這僅僅是示例數據,我使用的數據中有一些重複項,所以我確實需要能夠來處理這種情況。 (這是相同的查詢,因爲這:duplicate selection in text() XPath selector但在C#)

目前,該項目在selectionList出現兩次,但我的代碼只找到單詞的第一個實例中的RichTextBox和最後一個實例是不突出。我正在使用C#和.net 4.0在VS2013中工作。

非常感謝, 安雅

+0

可能重複http://stackoverflow.com/questions/1244428/how-do-i-find-repeated-text-in-a- richtextbox) – MethodMan 2014-12-02 16:26:00

+0

是的,這看起來不錯!除了我需要選擇短語而不是單個單詞。 而且,仔細看,問題是詢問如何找到重複項,我使用列表來容納我的項目,並且可以輕鬆找到重複項,現在我需要知道選擇文本中所有實例的最有效方法,而不是隻是第一個。 – 2014-12-02 16:34:03

+0

而實際上,能夠在文本框內選擇每個副本而不需要在選擇列表中進行重複會很好。例如, SelectionList =(漢堡,薯條)能夠自動選擇每個單詞的每個實例將是一件好事。 – 2014-12-02 16:46:35

回答

0

了這一點,但我真的很效率在這裏。任何人都可以做得更好嗎?

if (item.Length != 0) 
{ 
    if (!richTextBox.SelectedText.Contains(item)) 
    { 
     int charStart = richTextBox.Find(item); 
     richTextBox.SelectionFont = selectedFont; 
     richTextBox.Select(charStart, item.Length); 
    } 
    else 
    { 
     int charStart = richTextBox.Find(item); 
     charStart = richTextBox.Find(item, charStart + item.Length, RichTextBoxFinds.None); 
      richTextBox.SelectionFont = selectedFont; 
      richTextBox.Select(charStart, item.Length); 
     } 
} 
的[我如何找到一個RichTextBox重複的文字?](
0

你在一個循環中調用find()方法返回,直到-1。請注意,在循環中調用開始在最後找到位置+ 1:我來

 foreach (string item in selectionList) 
     { 
      if (item.Length != 0) 
      { 
       int charStart = richTextBox.Find(item, RichTextBoxFinds.None); 
       while (charStart != -1) 
       { 
        richTextBox.SelectionFont = selectedFont; 
        richTextBox.Select(charStart, item.Length); 
        charStart = richTextBox.Find(item, charStart + 1, RichTextBoxFinds.None); 
       } 
      } 
     } 
+0

看起來像是正確的東西,但是如果只能找到一個實例,這個特定的代碼會導致無限循環! – 2014-12-02 17:06:39

+0

?...不,它只適用於一個實例。我測試了它。如果找不到更多實例,則第二次調用Find()將返回-1。讓我看看你的實現... – 2014-12-02 17:29:35