2011-08-29 23 views
5

Tôi có một RichTextBox với -by example- văn bản này:C# RichTextBox Chọn định chữ

"This is my Text" 

Bây giờ tôi muốn "tìm kiếm" RichTextBox cho một văn bản (String), bằng cách ví dụ:

"Text" 

Now "văn bản" nên được lựa chọn/đánh dấu (cho mỗi người) trong RichTextBox ..

có cái gì đó như:

myRichTextBox.Select(); 

nhưng ở đây tôi phải đặt StartPosition và vân vân, nhưng tôi muốn tìm kiếm String!

Tôi làm cách nào để thực hiện việc này? (Tìm kiếm stackoverflow, không tìm thấy một cái gì đó tương tự ..)

Trả lời

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; 
     } 

Thanh Toán bài viết này nếu bạn không hiểu mã này ... http://www.dotnetcurry.com/ShowArticle.aspx?ID=146

+0

Tôi đã xem sai, nó chỉ được đánh dấu một từ, không phải một vài từ cùng một lúc. – eMi

+0

Bạn có thêm toàn bộ mã như nó không? – sikender

+0

vâng, nó chỉ hoạt động 4 từ .. Nhưng tôi muốn tất cả các từ được chọn với ONE Button-Click .. đó là vấn đề .. – eMi

1

Bạn chỉ có thể có một lựa chọn trong một hộp văn bản. Những gì bạn muốn là làm nổi bật văn bản tìm thấy.
Bạn có thể đạt được nó như thế này:

  1. Tìm vị trí của văn bản mà bạn muốn nhấn mạnh sử dụng các cuộc gọi lặp đi lặp lại để myRichTextBox.Text.IndexOf với chỉ số phát hiện mới nhất + 1 là vị trí bắt đầu.
  2. Đánh dấu các văn bản tìm thấy bằng các khả năng RichTextBox mặc định.
+0

Có, tôi muốn làm nổi bật văn bản đã tìm thấy. Cảm ơn bạn đã cho tôi thấy, Làm thế nào tôi có thể đạt được điều này .. nhưng nó trông như thế nào trong mã? (Tôi khá mới trong C#) – eMi

2

Bạn có thể sử dụng Find phương pháp để tìm ra startIndex văn bản tìm kiếm của bạn:

int indexToText = myRichTextBox.Find(searchText); 

Bạn sau đó có thể sử dụng chỉ mục này và phương pháp Chọn để chọn văn bản:

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

thx cho câu trả lời của bạn, đây cũng là một cách có thể yeah, nhưng làm thế nào tôi có nghĩa là để làm nổi bật, với chọn I cant chọn nhiều hơn 1 Word trong rtb – 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

Điều này sẽ tìm kiếm và chọn văn bản.Khi nó đến cuối và không tìm thấy bất cứ điều gì nó sẽ đi để bắt đầu và chọn sự xuất hiện đầu tiên. Điều này có vẻ hoàn hảo. – p0iz0neR

Các vấn đề liên quan