我想为我的 RichTextBox 进行查找和查找和替换功能。到目前为止,我发现 .Find() 函数非常方便,但我想不出让它跳到文本框中的下一个单词的好方法。
到目前为止,我有这个:
BeginIndex = txtDocument.Find(str, BeginIndex + WordLength, RichTextBoxFinds.None);
WordLength = str.Length;
BeginIndex 是一个公共变量,从 0 开始,与 WordLength 相同。这样,它将开始查看第一个字符,而下一次它将找不到相同的字符。但是有一个很大的故障,让我试着描述一下:“Hello blablab hello blablaal balbalbla hello blabla” 如果我在这句话中寻找“hello”,它会选择第一个 hello,然后是第二个,然后是第三个,然后又是第三个。之后它会一遍又一遍地找到第二个和第三个。因为 WordLength 仍然 > 0。
所以我需要一种新的方法来告诉 Find() 方法它不允许找到已经找到的那个,而是继续前进,当找到最后一个时,回到第一个。有没有更干净、更好的方法来做到这一点?
编辑:它几乎是固定的,我现在使用它:
BeginIndex = txtDocument.Find(str, BeginIndex, RichTextBoxFinds.None);
if(BeginIndex == -1) {
BeginIndex = 0;
SearchString(str, heelwoord, casesensitive);
}
BeginIndex += str.Length;
现在,这个循环非常好,而不是调用自己(int if),我还可以制作一个 MessageBox,上面写着“End is reached!”。但如果它什么也没找到,它会给我一个错误。我使用带有 2 个复选框的函数,一个执行 MatchCase,一个执行 WholeWord,但是当我在“asdasdasd”中查找“a”并检查 WholeWord 时,它会出错,因为它无法找到。