String.IndexOf 函数为 TextBox.Select 提供了错误的位置编号
String.IndexOf function giving incorrect position number for TextBox.Select
我在代码的 indexOf 功能中发现了一个奇怪的行为,我的字符串输入是从文本文件中读取的,当我在代码的第一行搜索一些文本时,indexOf 函数正确地识别了子字符串的位置,但是如果我在第二行中搜索一些文本,它会在完全匹配后 returns 一个字符,如果我在第三行中搜索某些内容,它会在完全匹配后返回 2 个字符位置,这会以相同的模式发生变化每一条新线。我不知道为什么会这样,我需要找到一种方法来获得与文本完全相同的位置。
我的代码:
string fileContent = File.ReadAllText(filename);
string display_string = "";
txtOriginalText.Text = fileContent;
HighlightText(fileContent.IndexOf("projection"), 5, Color.Aqua);
display_string += fileContent.IndexOf("projection").ToString() + '\n';
HighlightText(fileContent.IndexOf("component"), 5, Color.LightGreen);
display_string += fileContent.IndexOf("component").ToString() + '\n';
HighlightText(fileContent.IndexOf("layer"), 5, Color.Pink);
display_string += fileContent.IndexOf("layer").ToString() + '\n';
txtModifiedText.Text = display_string;
高亮功能
private void HighlightText(int startIndex, int textLength, Color state)
{
txtOriginalText.Select(startIndex, textLength);
txtOriginalText.SelectionBackColor = state;
}
图片:
我用 RichTextBox
:
测试了这个
richTextBox1.Text = "test\r\ntest\r\ntest\r\n";
当你在该行之后调试检查richTextBox1.Text
时,它的值为"test\ntest\ntest\n"
。
因此 RichTextBox
似乎从您的字符串中删除了 \r
(作为 Windows 文件内容可能包含换行符 \r\n
)。
作为一种直接解决方法,您应该在 txtOriginalText.Text
上使用 IndexOf
而不是 fileContent
。
我在代码的 indexOf 功能中发现了一个奇怪的行为,我的字符串输入是从文本文件中读取的,当我在代码的第一行搜索一些文本时,indexOf 函数正确地识别了子字符串的位置,但是如果我在第二行中搜索一些文本,它会在完全匹配后 returns 一个字符,如果我在第三行中搜索某些内容,它会在完全匹配后返回 2 个字符位置,这会以相同的模式发生变化每一条新线。我不知道为什么会这样,我需要找到一种方法来获得与文本完全相同的位置。
我的代码:
string fileContent = File.ReadAllText(filename);
string display_string = "";
txtOriginalText.Text = fileContent;
HighlightText(fileContent.IndexOf("projection"), 5, Color.Aqua);
display_string += fileContent.IndexOf("projection").ToString() + '\n';
HighlightText(fileContent.IndexOf("component"), 5, Color.LightGreen);
display_string += fileContent.IndexOf("component").ToString() + '\n';
HighlightText(fileContent.IndexOf("layer"), 5, Color.Pink);
display_string += fileContent.IndexOf("layer").ToString() + '\n';
txtModifiedText.Text = display_string;
高亮功能
private void HighlightText(int startIndex, int textLength, Color state)
{
txtOriginalText.Select(startIndex, textLength);
txtOriginalText.SelectionBackColor = state;
}
图片:
我用 RichTextBox
:
richTextBox1.Text = "test\r\ntest\r\ntest\r\n";
当你在该行之后调试检查richTextBox1.Text
时,它的值为"test\ntest\ntest\n"
。
因此 RichTextBox
似乎从您的字符串中删除了 \r
(作为 Windows 文件内容可能包含换行符 \r\n
)。
作为一种直接解决方法,您应该在 txtOriginalText.Text
上使用 IndexOf
而不是 fileContent
。