在 richtextbox 上使搜索词不区分大小写 c#

Make search terms on richtextbox case insensitive c#

我有一个富文本框,我在其中添加了搜索和突出显示功能,但它只会准确搜索用户键入的内容。我知道这是因为 MatchCase 属性 但其他选项的 none 似乎可以完成这项工作。这是我的代码:

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

如有任何帮助,我们将不胜感激。它可能很简单,但上周我花了好几个小时查看代码,它开始看起来很像 Matrix!

谢谢

您可以通过添加 Text.ToUpper() 方法进行搜索。 在 richTextBox1.Text 和搜索文本中添加 .ToUpper() 方法。

如前所述,对您操作的所有文本使用 ToUpper()ToLower() 方法。但我也想知道您是否不应该在键入时添加要搜索的事件而不是等待完整的字符串。这样会更直观,更容易排除故障。

我不知道你是否熟悉正则表达式,但它们在这种情况下很有用。我对它们不是很熟悉,但我觉得我会用它们试一试。没有它们,使用您的方法,您将不得不以某种方式检查所有情况的可能性。这就是正则表达式是你的朋友的地方。下面是从文本框中的文本创建正则表达式的代码。然后我使用那个表达式让 Matches 中的文本在 RichTexBox 中突出显示。希望这有帮助。

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