C#RichTextBox Find()Bug?

时间:2016-01-19 16:21:10

标签: c# winforms richtextbox

我不明白为什么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 个答案:

答案 0 :(得分:4)

不,这不是一个错误,但我会说文档可以编写,因为你必须深入了解以获取所需的信息。

经过一番游戏后,很明显规则如下:

  1. startend值是从零开始的索引,所以当你输入3时,你会要求它从一个不存在的字符开始。

  2. 如果您同时指定startend,则会搜索整个文本,如documentation中所述。

  3. 具体使用您的示例:

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

    在从零开始的索引编制中,33都大于文本的实际长度,因此您尝试从不存在的字符开始。但是,因为您对3start使用了end,所以您满足上面的第2点,因为整个文本将被搜索,这就是为什么你在第0位(第一次出现)获得一场比赛。

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

    在这里,您将start告诉最后一个字符,当您搜索2个字符时,它无法匹配,因此您获得-1作为结果。

    所以你的结果是预期的。