如何使我的richTextBox搜索不区分大小写?

时间:2013-04-10 02:16:27

标签: c# winforms visual-studio find

我正在制作一个文字处理器。文字处理器有一个工具,允许用户在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中的文本小写。我不希望它改变richTextBox中的实际文本。

有什么建议吗?

编辑

textBox位于Find表单上,richTextBox位于Basic_Word_Processor表单上。

3 个答案:

答案 0 :(得分:1)

我认为默认情况下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);
}

答案 1 :(得分:1)

您可以使用Regex

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

<强>结果:

enter image description here

答案 2 :(得分:0)

调用text1.Text.ToLower()不会使富文本框中的文本为小写,因为它只返回值。

您可以将其保存在字符串中:

string text = text1.Text.ToLower();

然后使用字符串文本处理搜索。

此外,我不太确定Find方法,但它应该有一个忽略大小写选项。如果没有,请确保将比较文本转换为小写。

编辑:

我可能会错误地认为哪一个是richTextBox,text1Basic_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中的文本转换为小写。保持温度
  • 将RichTextBox文本设置为空
  • 将RichTextBox文本替换为temp

当然它会使你的RichTextBox小写。

EDIT2:

好像用户想要通过给定的关键字突出显示所有找到的文本,但它不起作用。我会尽力回答。

首先, 而不是在富文本框中使用Find()方法,而是使用SelectionStartSelectionLength。我没有看到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;