У меня есть метод ниже, что должен выделять определенные строки текста в поле расширенного текста, а также заменять существующую строку новой строкой, содержащей комментарий (ошибка / успех).
Этот метод работает с одним файлом, работает с 2 файлами, но все, что больше, приведет к тому, что некоторые средние строки не получат цвет правильно.Я новичок в C # и не уверен, что есть какой-то нюанс, который мне не хватает.
Надеюсь, что приведенного ниже достаточно, чтобы помочь, но, по сути, результат в пользовательском интерфейсе состоит в том, что первый файл зеленый, второй зеленый, несмотря на ошибку, и запись в журнал показывает, что он должен быть красным, а последнийфайл правильно отображается красным цветом.
Вот код:
private void updateFileList(string fileName, string newFileName, Color color)
{
string matchString = Regex.Escape(fileName);
Console.WriteLine(matchString);
Console.WriteLine(color);
foreach (Match match in Regex.Matches(tbFileList.Text, matchString))
{
Console.WriteLine("MATCH: " + match);
tbFileList.Text = tbFileList.Text.Replace(fileName, newFileName);
tbFileList.SelectionStart = match.Index;
Console.WriteLine("INDEX: " + match.Index.ToString());
tbFileList.SelectionLength = newFileName.Length;
Console.WriteLine("LENGTH: " + newFileName.Length.ToString());
Console.WriteLine("SELECTED TEXT: " + tbFileList.SelectedText);
tbFileList.SelectionColor = color;
Console.WriteLine("SELECTION COLOR: " + tbFileList.SelectionColor);
};
}
А вот и результат Console.WriteLine
операторов:
===================
A:\\FileName1\.txt
Color [Green]
MATCH: A:\FileName1.txt
INDEX: 0
LENGTH: 102
SELECTED TEXT: A:\FileName1.txt | Success!
SELECTION COLOR: Color [Green]
===================
A:\\FileName2\.txt
Color [Red]
MATCH: A:\FileName2.txt
INDEX: 103
LENGTH: 164
SELECTED TEXT: A:\FileName2.txt | ERROR.
SELECTION COLOR: Color [Red]
===================
A:\\Filename3\.txt
Color [Red]
MATCH: A:\Filename3.txt
INDEX: 268
LENGTH: 147
SELECTED TEXT: A:\Filename3.txt | ERROR.
SELECTION COLOR: Color [Red]
NOTE
Я изменил имена файлов, поэтому индекс / длина могут не иметь смысла, если вы сравниваете их с именем файла.Похоже, они выстраиваются последовательно, поэтому я вполне уверен, что он не захватывает неправильную часть текста или что-то в этом роде.
Вызов метода, описанного выше, так:
updateFileList(fileName, newFileName, Color.Red);
РЕДАКТИРОВАТЬ
Изменено вместо этого без изменений:
string newText = tbFileList.Text.Replace(fileName, newFileName);
tbFileList.Text = newText;
РЕДАКТИРОВАТЬ 2
Я также пыталсяэто:
string newText = tbFileList.Text;
tbFileList.Text = newText.Replace(fileName, newFileName);