2010-11-24 16 views
1

Je voudrais demander pourquoi mes codes ne fonctionnent pas?Problème de fonction C# find (Impossible de mettre en évidence)

Actuellement, je suis capable de trouver le mot de l'utilisateur, mais il ne peut pas mettre en surbrillance le mot dans le richTextBoxConversation.

Comment dois-je procéder?

Voici mes codes:

private void buttonTextFilter_Click(object sender, EventArgs e) 
    { 
     string s1 = richTextBoxConversation.Text.ToLower(); 
     string s2 = textBoxTextFilter.Text.ToLower(); 

     if (s1.Contains(s2)) 
     { 
      MessageBox.Show("Word found!"); 
      richTextBoxConversation.Find(s2); 
     } 
     else 
     { 
      MessageBox.Show("Word not found!"); 
     } 
    } 
+0

Avez-vous besoin de faire quelque chose avec la valeur renvoyée par RichTextBox.Find()? – ddrace

Répondre

0

Vous pouvez sélectionner du texte dans RichTextBox, mais vous devez toujours vous rappeler que le texte sera en mode sélectionné si la zone richtextbox est active, donc votre code doit être

// RichTextBox.Select(startPos,length) 

int startPos = richTextBoxConversation.Find(s2); 

int length = s2.Length; 

if (startPos > -1) 
{ 
    MessageBox.Show("Word found!"); 
    // Now set focus on richTextBox 
    richTextBoxConversation.Focus(); 
    richTextBoxConversation.Select(startPos , length); 
} 
else 
{ 
    MessageBox.Show("Word not found!"); 
} 
+0

Hey désolé pour la réponse tardive. Vos codes fonctionnent si je les place sous la même forme. Si je les place sous une autre forme, cela ne peut pas fonctionner. – athgap

+0

Quoi qu'il en soit, savez-vous comment créer une prochaine fonction de recherche? S'il y a plus d'un mot du même mot, j'aimerais avoir une fonction suivante pour trouver le reste de ce mot en surbrillance dans la riche zone de texte. – athgap

6

Vous utilisez la méthode Find - cela vous dit simplement dans la zone de texte le mot existe, il ne sélectionne pas.

Vous pouvez utiliser la valeur de retour de Find avec Select pour "highlight" le mot:

if (s1.Contains(s2)) 
{ 
    MessageBox.Show("Word found!"); 
    int wordPosition = richTextBoxConversation.Find(s2); // Get position 
    richTextBoxConversation.Select(wordPosition, s2.Length); 
} 

Ou, encore mieux (évite la recherche s1 deux fois le mot):

int wordPosition = richTextBoxConversation.Find(s2); // Get position 
if (wordPosition > -1) 
{ 
    MessageBox.Show("Word found!"); 
    richTextBoxConversation.Select(wordPosition, s2.Length); 
} 
else 
{ 
    MessageBox.Show("Word not found!"); 
} 
+0

Je ne sais pas pourquoi mais il ne met toujours pas le mot en surbrillance dans la zone richtext. Quoi qu'il en soit, pouvez-vous m'expliquer pourquoi est-ce wordposition> -1? Pourquoi -1 et pas d'autres numéros? – athgap

+0

@athgap - si vous lisez la documentation sur find (je l'ai lié), il vous dira que la valeur de retour de 'Find' est' -1' si ** not found **. – Oded