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

发布于 2024-10-15 16:53:27 字数 707 浏览 1 评论 0原文

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

    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 的所有新行,但结果相同。有什么想法吗?

This seems like it should work to me but I can't seem to figure it out

    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();
    }

As is, this changes no text color. If I remove the new line after the inner loop, it will change the color of the last message only. Tried removing all of the new lines just for s's and g's but the same result. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想你只要分分秒秒 2024-10-22 16:53:27

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

I'd suggest you use AppendText() instead of += to add your text, and avoid using LastIndexOf() to compute your selection bounds. Clearing the selection after coloring it might also be a good idea:

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文