2011-08-29 112 views
5

我有一個RichTextBox與-by例 - 這樣的文字:C#RichTextBox中選擇指定的文本

"This is my Text" 

現在,我要爲文本(字符串)到 「搜索」 RichTextBox中,通過例如:

"Text" 

現在 「文本」 應選擇/在RichTextBox中突出顯示(每一個人)..

也有一些是這樣的:

myRichTextBox.Select(); 

但在這裏我必須設置一個StartPosition等,但我想搜索字符串!

我該怎麼做? (搜索到的stackoverflow,沒有找到類似的東西..)

回答

1
 int start = 0; 
int indexOfSearchText = 0; 
private void btnFind_Click(object sender, EventArgs e) 
     { 
      int startindex = 0; 

      if(txtSearch.Text.Length > 0) 
       startindex = FindMyText(txtSearch.Text.Trim(), start, rtb.Text.Length); 

      // If string was found in the RichTextBox, highlight it 
      if (startindex >= 0) 
      { 
       // Set the highlight color as red 
       rtb.SelectionColor = Color.Red; 
       // Find the end index. End Index = number of characters in textbox 
       int endindex = txtSearch.Text.Length; 
       // Highlight the search string 
       rtb.Select(startindex, endindex); 
       // mark the start position after the position of 
       // last search string 
       start = startindex + endindex; 
      } 
     } 




public int FindMyText(string txtToSearch, int searchStart, int searchEnd) 
     { 
      // Unselect the previously searched string 
      if (searchStart > 0 && searchEnd > 0 && indexOfSearchText >= 0) 
      { 
       rtb.Undo(); 
      } 

      // Set the return value to -1 by default. 
      int retVal = -1; 

      // A valid starting index should be specified. 
      // if indexOfSearchText = -1, the end of search 
      if (searchStart >= 0 && indexOfSearchText >=0) 
      { 
       // A valid ending index 
       if (searchEnd > searchStart || searchEnd == -1) 
       { 
        // Find the position of search string in RichTextBox 
        indexOfSearchText = rtb.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.None); 
        // Determine whether the text was found in richTextBox1. 
        if (indexOfSearchText != -1) 
        { 
         // Return the index to the specified search text. 
         retVal = indexOfSearchText; 
        } 
       } 
      } 
      return retVal; 
     } 



private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      start = 0; 
      indexOfSearchText = 0; 
     } 

CheckOut的這篇文章,如果你不明白這個代碼... http://www.dotnetcurry.com/ShowArticle.aspx?ID=146

+0

我看起來不對,它只標記一個單詞,不是一次多個。 – eMi

+0

您是否添加完整的代碼? – sikender

+0

是的,它只能工作4個單詞..但我想用ONE按鈕點擊選擇所有單詞..多數民衆贊成在這個問題.. – eMi

1

您只能在文本框中有一個選擇。你想要的是突出顯示找到的文本。
你可以做到這樣的:

  1. 找到您想要使用重複調用與作爲起始位置的最後一個發現指數+ 1,突出以myRichTextBox.Text.IndexOf文本的位置。
  2. 使用默認的RichTextBox功能突出顯示找到的文本。
+0

是的,我想突出顯示找到的文本。謝謝4顯示我,我怎麼能實現這個..但它在代碼中看起來如何? (我在C#中是相當新的) – eMi

2

您可以使用查找方法來找到您所查找的文本的startIndex:

int indexToText = myRichTextBox.Find(searchText); 

你可以使用此索引和Select方法選擇文本:

int endIndex = searchText.Length; 
myRichTextBox.Select(indexToText , endIndex); 
+0

thx爲您的答案,這也是一種可能的方式是的,但我的意思是突出顯示,選擇我不能在rtb中選擇多於1個字 – eMi

0
private void Txt_Search_Box_TT_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
     FOFO: 
      int start = 
       RtfAll_Messages.Find(Txt_Search_Box_TT.Text, RtfAll_Messages.SelectionStart + 1, 
       RichTextBoxFinds.None); 
      if (start >= 0) 
       RtfAll_Messages.Select(start, Txt_Search_Box_TT.Text.Length); 
      else 
      { 
       start = 0; 
       RtfAll_Messages.SelectionStart = 0; 
       RtfAll_Messages.SelectionLength = 0; 
      } 
     } 
    } 
+1

這將搜索並選擇文本。當它到達最後並且沒有發現任何東西時,它將開始並選擇第一次出現。這看起來很完美。 – p0iz0neR

相關問題