循环并在richtextbox中搜索文本

时间:2013-09-17 13:46:09

标签: c# winforms richtextbox

我正在尝试创建一个像ms一样的查找和替换。我创建了一个新的form并添加了textbox和findnext button

问题现在我如何遍历文本框并逐个查找文本并突出显示它们。

我试过了

    private void btnFindNext_Click(object sender, EventArgs e)
    {
        frmTextpad text = (frmTextpad)Application.OpenForms["frmTextpad"];
        int length = txtFind1.Text.Length;
        for (int a = 0; a >= 0; a++)
        {
            int location = text.Current.Find(text.Current.Text, a, RichTextBoxFinds.None);
            text.Current.Select(location, txtFind1.Text.Length);
            text.Current.SelectionBackColor = Color.Blue;
        }
    }

我得到ArgumentOutofRangeException

请问我做错了什么,我怎样才能实现我的目标?

2 个答案:

答案 0 :(得分:2)

你的for循环永远不会终止,并且正在文本块的末尾和你正在搜索的字符串边界之外运行。

for (int a = 0; a >= 0; a++)

只要int a大于0,就会继续运行,这是永远的,因为你永远不会减少它。当它到达某个点(您正在搜索的字符串的长度)时,您将需要终止循环。可能更像是这样:

for (int a = 0; a < text.Current.Text.Length; a++)

此处看起来您正在搜索文本框中的文本:

int location = text.Current.Find(text.Current.Text, a, RichTextBoxFinds.None);

我不熟悉表单的结构,但看起来您想要搜索txtFind控件的值。所以你想要的更像是这样:

int location = text.Current.Find(txtFind1.Text, a, RichTextBoxFinds.None);

答案 1 :(得分:1)

看看

  for (int a = 0; a >= 0; a++)

现在,for循环永远不会停止

因此a >= 0不应该是a <= length