[英]Make search terms on richtextbox case insensitive c#
我有一个richtextbox,我已经添加了搜索和突出显示功能,但是它将仅搜索用户键入的内容。 我知道这是由于MatchCase属性引起的,但其他任何选项似乎都不起作用。 这是我的代码:
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()
方法用于您处理的所有文本。 但是我也想知道您是否应该在键入时而不是等待完整的字符串时添加事件以进行搜索。 这将更加直观,而且更容易进行故障排除。
我不知道您是否熟悉正则表达式,但在这种情况下它们很有用。 我对它们不那么熟悉,但是我觉得可以使用它们来尝试一下。 没有它们,使用您的方法,您将不得不检查所有情况下的可能性。 在这里,正则表达式就是您的朋友。 以下是从文本框中的文本创建正则表达式的代码。 然后,我使用该表达式在RichTexBox
中的文本中获取“ 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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.