2017-01-07 5 views
0

J'ai une riche zone de texte dans laquelle j'ai ajouté une fonction de recherche et de mise en surbrillance mais qui ne recherche que ce que l'utilisateur tape. Je sais que c'est à cause de la propriété MatchCase mais aucune des autres options ne semble faire le travail. Voici mon code:Rendre les termes de recherche sur insensible à la casse richtextbox C#

private void btnSourceSearch_Click(object sender, EventArgs e) 
{ 
    int start = 0; 
    int end = richTextBox1.Text.LastIndexOf(textBox1.Text); 

    richTextBox1.SelectAll(); 
    richTextBox1.SelectionBackColor = Color.White; 

    while(start < end) 
    { 
      richTextBox1.Find(textBox1.Text, start, richTextBox1.TextLength, RichTextBoxFinds.MatchCase); 

      richTextBox1.SelectionBackColor = Color.Yellow; 

      start = richTextBox1.Text.IndexOf(textBox1.Text, start) + 1; 
    } 
} 

Toute aide serait grandement appréciée. C'est probablement simple mais j'ai regardé du code pendant quelques heures au cours de la dernière semaine et ça commence à ressembler beaucoup à la matrice!

Merci

Répondre

0

Je ne sais pas si vous connaissez les expressions régulières, mais elles sont utiles dans cette situation. Je ne suis pas familier avec eux, mais je pensais que je donnerais un coup de feu en les utilisant. Sans eux, en utilisant votre approche, vous devrez vérifier en quelque sorte toutes les possibilités de cas. C'est là que les expressions régulières sont votre ami. Voici le code qui crée une expression régulière à partir du texte dans la zone de texte. Ensuite, j'utilise cette expression pour obtenir le Matches dans le texte dans le RichTexBox pour mettre en évidence. J'espère que cela t'aides.

private void button1_Click(object sender, EventArgs e) { 
    richTextBox1.SelectAll(); 
    richTextBox1.SelectionBackColor = Color.White; 
    if (textBox1.Text.Length < 1) 
    return; 
    string pattern = @"\b" + textBox1.Text.Trim() + @"\b"; 
    Regex findString = new Regex(pattern, RegexOptions.IgnoreCase); 
    foreach (Match m in findString.Matches(richTextBox1.Text)) { 
    richTextBox1.Select(m.Index, m.Length); 
    richTextBox1.SelectionBackColor = Color.Yellow; 
    } 
} 
+0

Nous vous remercions pour cela. Fonctionne un régal –

0

Vous pouvez faire votre recherche en ajoutant la méthode Text.ToUpper(). Ajoutez la méthode .ToUpper() dans votre texte richTextBox1.Text et recherchez le texte à la fois.

0

Comme mentionné précédemment, utilisez la méthode ToUpper() ou ToLower() pour tous les textes avec lesquels vous travaillez. Mais je me demande aussi si vous ne devriez pas ajouter l'événement à rechercher en tapant au lieu d'attendre la chaîne complète. Ce serait plus intuitif et plus facile à dépanner du tout.