2011-08-29 12 views
5

-by के साथ इस पाठ उदाहरण मैं एक RichTextBox है:सी # RichTextBox चुनें निर्दिष्ट पाठ

"This is my Text" 

अब मैं एक पाठ (स्ट्रिंग) के लिए "खोज" के लिए RichTextBox चाहते हैं, उदाहरण के द्वारा:

"Text" 

अब "पाठ" चयन किया जाना चाहिए/RichTextBox में प्रकाश डाला (हर एक के लिए) ..

वहाँ कुछ की तरह है:

myRichTextBox.Select(); 

लेकिन यहां मुझे एक स्टार्टपॉजिशन सेट करना है और इसी तरह, लेकिन मैं स्ट्रिंग की खोज करना चाहता हूं!

मैं यह कैसे कर सकता हूं? (खोजे गए स्टैक ओवरफ्लो को कुछ समान नहीं मिला ..)

उत्तर

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

चेकआउट इस लेख यदि आप इस कोड को समझने के न ... http://www.dotnetcurry.com/ShowArticle.aspx?ID=146

+0

मुझे गलत लग रहा था, यह केवल एक शब्द चिह्नित है, कई बार नहीं .. – eMi

+0

क्या आप पूरे कोड को जोड़ते हैं? – sikender

+0

हाँ, यह केवल 4 एक शब्द काम करता है .. लेकिन मुझे एक बटन-क्लिक के साथ चुने गए सभी शब्द चाहिए .. समस्या है .. – eMi

1

आप केवल टेक्स्ट बॉक्स में एक ही चयन कर सकते हैं। आप जो चाहते हैं वह पाया गया टेक्स्ट हाइलाइट करना है।
आप इस तरह इसे प्राप्त कर सकते हैं:

  1. आप पिछले पाया सूचकांक + 1 प्रारंभ स्थिति के रूप में साथ myRichTextBox.Text.IndexOf के लिए कई बार कॉल का उपयोग हाइलाइट करना चाहते हैं पाठ के पदों का पता लगाएं।
  2. डिफ़ॉल्ट RichTextBox क्षमताओं का उपयोग कर पाए गए ग्रंथों को हाइलाइट करें।

    int indexToText = myRichTextBox.Find(searchText); 
    

    आप:

+0

हां, मैं पाया गया पाठ हाइलाइट करना चाहता हूं .. धन्यवाद 4 मुझे दिखा रहा है, मैं इसे कैसे प्राप्त कर सकता हूं .. लेकिन यह कोड में कैसा दिखता है? (मैं सी # में काफी नया हूं) – eMi

2

आप अपने खोज पाठ के STARTINDEX ढूंढने के लिए खोज विधि का उपयोग कर सकते हैं फिर पाठ का चयन करने के लिए इस अनुक्रमणिका और चयन विधि का उपयोग कर सकते हैं:

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

thx आपके उत्तर के लिए, यह भी एक संभावित तरीका है, लेकिन मैं कैसे हाइलाइट करना चाहता था, चयन के साथ मैं आरटीबी – 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

में 1 से अधिक शब्द का चयन नहीं कर सकता, यह पाठ को खोज और चयन करेगा।जब यह अंत तक पहुंच जाता है और कुछ भी नहीं मिला, तो यह शुरू होगा और पहली घटना का चयन करेगा। यह सही दिखता है। – p0iz0neR

संबंधित मुद्दे