在循环中更改富文本框字体颜色

时间:2011-02-02 15:20:12

标签: c# richtextbox

这似乎应该对我有用,但我似乎无法弄清楚

    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 个答案:

答案 0 :(得分:1)

我建议您使用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);
}