C#RichTextBox Find()Bug?
我不明白为什么C#RichTextBox Find()Bug?,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我不明白为什么position=0而不是position=-1 RichTextBox.Text = "aaa"; int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None); 和position=-1if RichTextBox.Text = "aaa"; int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None); 不,这不是一个bug,但我想
position=0
而不是position=-1
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);
和position=-1
if
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);
不,这不是一个bug,但我想说文档可以编写,因为您必须深入挖掘才能获得所需的信息 经过一番周旋,很明显规则如下:
start
和end
值是从零开始的索引,因此当您输入3时,您要求它从不存在的字符开始start
和end
都指定为相同的值,则将按照中的指定搜索整个文本具体使用您的示例:
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None);
在基于零的索引中,3
和3
都大于文本的实际长度,因此您尝试从不存在的字符开始。但是,由于您对start
和end
都使用了3
,因此您满足了上面的第二点,因为整个文本都将被搜索,这就是为什么您在位置0(第一次出现)处得到匹配
在这里,您告诉它从最后一个字符开始,当您搜索2个它无法匹配的字符时,结果是-1
因此,您的结果与预期的一样。如果文档没有涵盖它,那么这是一个错误,当然不是预期的。不管这个bug是在文档中还是在行为中,我都不知道,但在我看来,绕圈是相当疯狂的,说得委婉一点,所以我称它为bug,bug,bug;-)。正如@Graham所指出的那样:当开始和结束参数被提供相同的值时,整个控件将被搜索为正常的搜索,因此它不是一个环绕,只是很奇怪。@TaW:看起来你不是一个环绕,我确信我昨天证明了这是温的测试,但我现在似乎不能这样做,所以一定是我的错误。我会更新我的答案好的,谢谢你的回答。但是如果start>=RichTextBox.Length,为什么要返回0?@GRUNGER:因为在这种情况下,
start==end
(3==3
),这意味着搜索所有文本(不管是否超出范围,只要它与结束值匹配),请不要创建帐户/让你的朋友喜欢你的帖子。
RichTextBox.Text = "aaa";
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None);