GUI最小化时,RichText GUI选择颜色问题

时间:2018-04-02 13:13:18

标签: c# winforms richtextbox

我在C#中有简单的Win-form GUI,它根据收到的值显示红色或绿色的文本。只要我没有最小化GUI,RichText就会正确显示文本。当GUI最小化时,“文本”窗口中显示的文本为黑色(仅限GUI最小化时处理的数据)。当GUI最大化时,数据的文本颜色再次正确显示。

请告诉我这里有什么问题。

Here is my code:



LogMessageWindow.Find(message);
LogMessageWindow.SelectionColor = Color.Red;  /// if message&2==0 set color to Red otherwise set color to green
LogMessageWindow.SuspendLayout();
LogMessageWindow.Focus();
LogMessageWindow.AppendText(message + ".\n");
LogMessageWindow.ScrollToCaret();*

2 个答案:

答案 0 :(得分:0)

在您的代码中,您有:

LogMessageWindow.Find(message);

这一行没用:你正在追加一大块文本。在追加它之前搜索它不会做太多事情(可能找到相同的字符串。然后是什么?)。

LogMessageWindow.SuspendLayout();
如果您批量添加/附加大量文本行,

SuspendLayout()会很有用。完成后,您应该ResumeLayout()。在这里似乎不需要。

LogMessageWindow.Focus();

将焦点移动到RTB控件并不能完成任何特殊操作。如果容器表单最小化...由于您在程序中添加文本,因此不需要重点。

你可以做几件事。

使用方法,传递对用于此任务的RichTextBox的引用,要使用的颜色以及要追加的文本。
此处新文本颜色定义为Color? color,如果您通过null,则会使用控件ForeColor

RTBAppendWithColor(LogMessageWindow, 
                 ((message & 2) == 0) ? Color.Red : Color.Green, 
                   message.ToString() + "\n");

private void RTBAppendWithColor(RichTextBox rtb, Color? color, string AppendedText)
{
    int sLenght = AppendedText.Length;

    rtb.AppendText(AppendedText);
    rtb.Select(rtb.Text.Length - sLenght, sLenght);
    if (color != null)
        rtb.SelectionColor = (Color)color;
    rtb.ScrollToCaret();
}

使用附加信息
使用引用RichTextBox对象的静态方法创建静态类。此方法将是您创建的任何RichTextBox的新方法。

LogMessageWindow.AppendWithColor(((message & 2) == 0) ? Color.Red : Color.Green, 
                                   message.ToString() + "\n");

public static class RTBExtensions
{
    public static void AppendWithColor(this RichTextBox rtb, Color? color, string AppendedText)
    {
        int sLenght = AppendedText.Length;

        rtb.AppendText(AppendedText);
        rtb.Select(rtb.Text.Length - sLenght, sLenght);
        if (color != null)
            rtb.SelectionColor = (Color)color;

        rtb.ScrollToCaret();
    }
}

如果您使用 FrameWork 3.5 ,即使调用ScrollToCaret(),选择文本也可能会保持选中状态。如果看起来很难看,请添加:

rtb.SelectionStart = rtb.Text.Length;
rtb.ScrollToCaret()之前

答案 1 :(得分:0)

感谢您的宝贵意见。我能够通过起诉这段代码来完成这项工作。 LogMessageWindow.SelectionStart = LogMessageWindow.TextLength; LogMessageWindow.SelectionLength = 0; LogMessageWindow.SelectionColor = Color.Red; LogMessageWindow.SuspendLayout();LogMessageWindow.AppendText(message + ".\n"); LogMessageWindow.ScrollToCaret(); ` LogMessageWindow.ResumeLayout()