Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#RichTextBox Find()Bug?_C#_Winforms_Richtextbox - Fatal编程技术网

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);