String.IndexOf函数为TextBox.Select提供错误的位置编号

时间:2017-12-01 10:43:04

标签: c# winforms richtextbox

我在我的代码中发现了indexOf功能中的一个奇怪的行为,我的字符串输入是从文本文件中读取的,当我在代码的第一行搜索一些文本时,indexOf函数正确识别子字符串的位置,但是如果我在第二行中搜索一些文本,它会在完全匹配后返回一个字符,如果我在第3行搜索某些内容,它在完全匹配后返回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;
    }

图像: enter image description here

1 个答案:

答案 0 :(得分:4)

我用RichTextBox测试了这个:

richTextBox1.Text = "test\r\ntest\r\ntest\r\n";

在该行之后调试并检查richTextBox1.Text时,其值为"test\ntest\ntest\n"

因此RichTextBox似乎从您的字符串中删除了\r(作为Windows文件内容可能包含新的行字符\r\n)。

如果您需要立即解决问题,请IndexOf使用txtOriginalText.Text代替fileContent