[英]How do I make my richTextBox search case-insensitive?
我正在制作文字处理器。 文字处理器具有允许用户在richTextBox中搜索文本的工具。
目前,我的“查找”代码包括:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Basic_Word_Processor
{
public partial class Find : Form
{
public Find()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int index = 0;
string temp = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text;
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = "";
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = temp;
while (index < Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.LastIndexOf(textBox1.Text))
{
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(textBox1.Text, index, Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.TextLength, RichTextBoxFinds.None);
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.IndexOf(textBox1.Text, index) +1;
{
}
}
}
private void Find_FormClosing(object sender, FormClosingEventArgs e)
{
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.White;
}
}
}
但是,如果richTextBox包含单词“TEST”,并且用户搜索“test”,则不会找到任何结果。
我在MSDN论坛上问了同样的问题,但是我被告知转换textBox和richTextBox ToLower,这有效,但它使富文本框中的文本小写。 我不希望它改变richTextBox中的实际文本。
有什么建议么?
编辑
textBox位于Find表单上,richTextBox位于Basic_Word_Processor表单上。
我相信默认情况下C#区分大小写,但LastIndexOf(可能是IndexOf)有一个重载,允许通过指定StringComparison.InvariantCultureIgnoreCase(或类似的东西)之类的参数进行不区分大小写的搜索。 请参阅http://msdn.microsoft.com/en-us/library/ms224422.aspx 。
编辑:
为了澄清,我建议将代码更改为:
string findText = textBox1.Text;
string currentText = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text;
int index = currentText.IndexOf(findText, StringComparison.InvariantCultureIgnoreCase);
while (index >= 0)
{
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, index, currentText.Length, RichTextBoxFinds.None);
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
index = currentText.IndexOf(findText, index+1, StringComparison.InvariantCultureIgnoreCase);
}
但是,现在我考虑一下,你应该能够做一些更简单的事情,例如:
int index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, RichTextBoxFinds.None);
while (index >= 0)
{
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, index+1, RichTextBoxFinds.None);
}
你可以使用正则表达式
private void button1_Click(object sender, EventArgs e)
{
Regex reg = new Regex("text",RegexOptions.IgnoreCase);
foreach (Match find in reg.Matches(richTextBox1.Text))
{
richTextBox1.Select(find.Index, find.Length);
richTextBox1.SelectionColor = Color.Red;
}
}
结果:
调用text1.Text.ToLower()
不会使富文本框中的文本为小写,因为它只返回值。
你可以把它保存在一个字符串中:
string text = text1.Text.ToLower();
然后使用字符串文本来处理搜索。
此外,我不太确定Find
方法,但它应该有一个忽略大小写选项。 如果没有,请确保将比较文本也转换为小写。
编辑:
我可能会错误地认为哪一个是richTextBox, text1
或Basic_Word_Processor.Instance.richTextBoxPrintCtrl1
如果案例是Basic_Word_processor中的案例,那么在评论中给出的MSDN链接中:
string temp = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.ToLower();
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = "";
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = temp;
它基本上说:
当然它会使你的RichTextBox小写。
EDIT2:
好吧,似乎用户想要通过给定的关键字突出显示所有找到的文本,但它无法正常工作。 我会尽力回答。
首先,不要在富文本框中使用Find()方法,而是使用SelectionStart
和SelectionLength
。 我没有看到Find()方法给出不区分大小写的比较。
例:
string richText = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.ToLower();
string keyText = textBox1.Text.ToLower();
在while语法中,使用重载字符串LastIndexOf来比较非大小写敏感。 现在这可能不是问题,因为富人已经处于较低的状态。
while (index < richText.LastIndexOf(textBox1.Text, StringComparison.InvariantCultureIgnoreCase))
然后要查找文本,请使用以下内容:
index = richText.IndexOf(keyText, index);
然后设置颜色如下:
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionStart = index;
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionLength = keyText.Length;
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.