Изменение цвета шрифта расширенного текстового поля в цикле - PullRequest
1 голос
/ 02 февраля 2011

Мне кажется, это должно сработать, но я не могу понять,

    public void ShowReport()
    {
        foreach (KeyValuePair<int, ReportSet> pair in ReportSets)
        {
            ReportText.Text += pair.Value.ReportSetText + Environment.NewLine;
            foreach (string message in pair.Value.ReportMessages)
            {
                ReportText.Text += message;
                ReportText.Select(ReportText.Text.LastIndexOf(message), message.Length);
                ReportText.SelectionColor = pair.Value.Color;
            }
            ReportText.Text += Environment.NewLine;
        }
        this.Show();
    }

Так как это не меняет цвет текста.Если я удалю новую строку после внутреннего цикла, она изменит цвет только последнего сообщения.Попытался удалить все новые строки только для s и g, но тот же результат.Есть идеи?

1 Ответ

1 голос
/ 02 февраля 2011

Я бы посоветовал вам использовать AppendText () вместо += для добавления текста и избегайте использования LastIndexOf() для вычисления границ выбора.Очистка выделения после окрашивания также может быть хорошей идеей:

foreach (KeyValuePair<int, ReportSet> pair in ReportSets) {
    ReportText.AppendText(pair.Value.ReportSetText + Environment.NewLine);
    foreach (string message in pair.Value.ReportMessages) {
        int start = ReportText.TextLength;
        ReportText.AppendText(message);
        ReportText.Select(start, ReportText.TextLength - start);
        ReportText.SelectionColor = pair.Value.Color;
        ReportText.SelectionLength = 0;
    }
    ReportText.AppendText(Environment.NewLine);
}
...