C# RichTextBox Find() 错误?

C# RichTextBox Find() Bug?

我不明白为什么 position=0 而不是 position=-1

RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);

并且position=-1如果

RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);

不,这不是错误,但我想说可以编写文档,因为您必须深入研究才能获得所需的信息。

经过一番尝试,很明显规则如下:

  1. startend 值是 zero-based 索引,所以当您输入 3 时,您要求它从一个不包含的字符开始存在。

  2. 如果将 startend 指定为相同的值,则会搜索整个文本,如 documentation 中指定的那样。


具体使用您的示例:

RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);

在 zero-based 索引中,33 都大于文本的实际长度,因此您试图从一个不存在的字符开始。但是,因为您对 startend 都使用了 3,所以您满足上面的第二点,因为 whole 文本将被搜索,这就是为什么你在位置 0(第一次出现)得到匹配。

RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);

这里你在最后一个字符处告诉它 start,当你搜索 2 个字符时它无法匹配,所以你得到 -1 作为结果..

所以你的结果符合预期。