Обращаюсь к тебе, уважаемое хабрасообщество со своим, возможно, ламерским вопросом. На форме есть RichTextBox, который называется richInputChains. Стоит задача раскрасить каждую его строчку в красный или зеленый цвет в зависимости от результатов некой проверки. Я делаю это так:
foreach(string line in richInputChains.Lines)
{
bool accepted = SomeCheck(line);
richInputChains.SelectionStart = pos;
richInputChains.SelectionLength = line.Length;
richInputChains.SelectionBackColor = (accepted) ? Color.Green : Color.Red;
pos += line.Length + 1;
}
Все прекрасно работает. Но вот я никак не могу понять, как теперь сбросить всю эту раскраску. Делаю это в обработчики события TextChange для richInputChains:
private void richInputChains_TextChanged(object sender, EventArgs e)
{
richInputChains.SelectionBackColor = System.Drawing.SystemColors.Window;
}
Однако, когда я начинаю менять текст, старая раскраска остается. Что делать? В чем я не прав?
Метод типа:
richInputChains.SelectAll();
richInputChains.SelectionBackColor = System.Drawing.SystemColors.Window;
richInputChains.DeselectAll();
и подобные ему неудачны, так как они не дают спокойно вводить новый текст (ведь действо происходит в обработчике измененения текста), ведь пользователь кликнул в определенную позицию в тексте, а после указанных преобразование каретка переноситься на начало текста.