C# RichTextBox Find() 错误?

标签 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. startend 值是从零开始的索引,所以当您输入 3 时,您是在要求它从一个不存在的字符开始存在。

  2. 如果您将startend 指定为相同的值,则会搜索整个文本,如documentation 中指定的那样.


具体使用您的示例:

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

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

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

这里您告诉它从最后一个字符开始,当您搜索 2 个字符时它无法匹配,所以您得到 -1 结果..

所以你的结果符合预期。

关于C# RichTextBox Find() 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881803/

相关文章:

vb.net - 在vb.net中获取垂直滚动条位置作为整数

wpf - ViewBox 使 RichTextBox 失去插入符

c# - 在 C# 的控制台程序中使用 [STAThread]

c# - Page.User.Identity.IsAuthenticated 在 FormsAuthentication.SignOut() 之后仍然为真

c# - Xamarin。当前上下文中不存在名称“authorEntry”

c# - 玻璃表面上的发光标签控件

vb.net - ListView AutoReziseColumns 不起作用

c# - 合并两个 EF 查询,无法将 System.Data.Entity.Infrastruct.DbQuery 类型的对象强制转换为 System.Collections.Generic.IEnumerable

c# - 如何使用 C# 将 mysql 中的表名列出到组合框中?

c# - WPF TextBox 和 RichTextBox 的组合