我正在尝试创建一个像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
。
请问我做错了什么,我怎样才能实现我的目标?
答案 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