C# RichTextBox Find() Bug?

本文关键字:Bug RichTextBox Find | 更新日期: 2023-09-27 18:31:11

我不明白为什么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);

C# RichTextBox Find() Bug?

不,这不是

一个错误,但我想说文档可以编写,因为您必须深入研究以获取所需的信息。

经过一番玩弄,很明显规则如下:

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

  2. 如果将startend指定为相同的值,则会按照文档中的规定搜索整个文本。


具体使用您的示例:

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

在从零开始的索引中,33都大于文本的实际长度,因此您尝试从不存在的字符开始。但是,由于您startend都使用了3,因此您满足上述第二点,因为整个文本将被搜索,这就是为什么您在位置 0 处获得匹配项(第一次出现)。

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

在这里,您告诉它start最后一个字符,当您搜索 2 个字符时,它无法匹配,因此您会得到-1

因此,您的结果符合预期。