2011-08-29 16 views
5

Ho un RichTextBox con -da esempio- questo testo:C# RichTextBox Selezionare il testo specificato

"This is my Text" 

Ora voglio "ricerca" RichTextBox per un testo (stringa), con l'esempio:

"Text" 

Ora dovrebbe essere selezionato "Text"/evidenziato (per ciascuno) nel RichTextBox ..

C'è qualcosa di simile:

myRichTextBox.Select(); 

ma qui devo impostare una StartPosition e così via, ma voglio cercare String!

Come posso fare questo? (Stackoverflow cercato, non ha trovato nulla di simile ..)

risposta

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 questo articolo se non capite questo codice ... http://www.dotnetcurry.com/ShowArticle.aspx?ID=146

+0

Ho un aspetto sbagliato, è contrassegnato solo una parola, non molte contemporaneamente. – eMi

+0

Aggiungete l'intero codice così com'è? – sikender

+0

sì, funziona solo 4 una parola .. Ma io voglio tutte le parole selezionate con UNO Pulsante-Click .. questo è il problema .. – eMi

1

È possibile avere una sola selezione in una casella di testo. Quello che vuoi è evidenziare il testo trovato.
si potrebbe ottenere in questo modo:

  1. Trova le posizioni del testo che si desidera evidenziare con ripetute chiamate al myRichTextBox.Text.IndexOf con l'ultima trovata index + 1 come posizione di partenza.
  2. Evidenzia i testi trovati utilizzando le funzionalità predefinite di RichTextBox.
+0

Sì, voglio evidenziare il testo trovato .. Grazie 4 mostrandomi, Come potrei ottenere questo .. ma come appare nel codice? (Sono abbastanza nuovo in C#) – eMi

2

È possibile utilizzare il metodo Find per trovare lo startIndex del testo cercato:

int indexToText = myRichTextBox.Find(searchText); 

È può quindi utilizzare questo indice e il metodo Seleziona per selezionare il testo:

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

thx per la tua risposta, anche questo è un modo possibile si, ma come intendevo evidenziare, con select non posso selezionare più di 1 word nel 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

Questo cercherà e selezionerà il testo.Quando raggiunge la fine e non trova nulla, andrà all'inizio e selezionerà la prima occorrenza. Questo sembra perfetto. – p0iz0neR

Problemi correlati