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);
不,这不是错误,但我想说可以编写文档,因为您必须深入研究才能获得所需的信息。
经过一番尝试,很明显规则如下:
start
和 end
值是 zero-based 索引,所以当您输入 3 时,您要求它从一个不包含的字符开始存在。
如果将 start
和 end
指定为相同的值,则会搜索整个文本,如 documentation 中指定的那样。
具体使用您的示例:
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);
在 zero-based 索引中,3
和 3
都大于文本的实际长度,因此您试图从一个不存在的字符开始。但是,因为您对 start
和 end
都使用了 3
,所以您满足上面的第二点,因为 whole 文本将被搜索,这就是为什么你在位置 0(第一次出现)得到匹配。
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);
这里你在最后一个字符处告诉它 start
,当你搜索 2 个字符时它无法匹配,所以你得到 -1
作为结果..
所以你的结果符合预期。
我不明白为什么 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);
不,这不是错误,但我想说可以编写文档,因为您必须深入研究才能获得所需的信息。
经过一番尝试,很明显规则如下:
start
和end
值是 zero-based 索引,所以当您输入 3 时,您要求它从一个不包含的字符开始存在。如果将
start
和end
指定为相同的值,则会搜索整个文本,如 documentation 中指定的那样。
具体使用您的示例:
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);
在 zero-based 索引中,3
和 3
都大于文本的实际长度,因此您试图从一个不存在的字符开始。但是,因为您对 start
和 end
都使用了 3
,所以您满足上面的第二点,因为 whole 文本将被搜索,这就是为什么你在位置 0(第一次出现)得到匹配。
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);
这里你在最后一个字符处告诉它 start
,当你搜索 2 个字符时它无法匹配,所以你得到 -1
作为结果..
所以你的结果符合预期。