我有一个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!
由于
答案 0 :(得分:0)
您可以通过添加Text.ToUpper()方法进行搜索。 在richTextBox1.Text中添加.ToUpper()方法并搜索文本。
答案 1 :(得分:0)
如上所述,对您使用的所有文本使用ToUpper()
或ToLower()
方法。但是我也想知道你是否应该在输入时将事件添加到搜索中而不是等待完整的字符串。这将更直观,更容易排除故障。
答案 2 :(得分:0)
我不知道您是否熟悉正则表达式,但它们在这种情况下很有用。我对他们并不熟悉,但觉得我会用它们来拍摄。如果没有它们,使用您的方法,您将不得不以某种方式检查所有案例的可能性。这就是正则表达式是你的朋友的地方。下面是从文本框中的文本创建正则表达式的代码。然后我使用该表达式获取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;
}
}