2

我正在尝试使用 c# 中的应用程序中的窗口创建 GUI。我最近开始了。我在显示一些文本信息时遇到了一个问题。

我正在获取多个传感器数据,每个传感器都有名称、编号和数据。在这里,我能够将所有传感器数据放入“_sensordata”。

我能够以块颜色打印来自传感器的数据,为此,下面的代码运行良好。问题是我想为每个传感器数据设置一些条件以显示不同颜色的文本。

例如,我有一个名为“温度”的传感器。目前温度数据和温度传感器名称以方块颜色显示。现在,当温度小于“0”或大于“150”时,我想以“红色”显示值。我不知道如何显示。我对每个传感器都有相同类型的条件,那么如何实现这一点。我想以“块”颜色显示“sensorData.EngText”,如果它在范围之间,否则我需要以“红色”颜色显示(对于所有传感器)。

我有下面的富文本格式代码,所以任何人都可以建议我如何为下面代码中的文本之一添加颜色。

if (Display != null)
                    {        //UpdateDisplay1();
                        StringBuilder text = new StringBuilder();
                        text.Append("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1044");
                        text.Append("{\\fonttbl{\\f0\\fnil Tahoma;}}");
                        text.Append("{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;\\red255\\green255\\blue0;}");

                        text.Append("\\viewkind4\\uc1\\pard");
                        text.Append("{\\tx100\\tx2100\\tx4100\\tx6100\\tx8100\\tx10100");
                        text.Append("\\tx12100\\tx14100\\tx16100\\tx18100\\tx20100}");
                        text.Append("\\fs20\\ql\\b");
                        text.Append(string.Format("\\tab {0}", e.Data.SensorName));
                        text.Append("\\par\\fs35\\ql\\b0");
                        text.Append(string.Format("\\tab {0}", e.Data.EngText));

                        if (Display.InvokeRequired)
                        {
                            Display.Invoke((MethodInvoker)delegate { Display.Rtf = text.ToString(); });
                        }
                        else
                        {
                            Display.Rtf = text.ToString();
                        }
                    }
4

1 回答 1

4

您无需手动构建 RTF - 将工作留给 RichTextBox!

richTextBox.SelectionBackColor = Color.Red;
richTextBox.AppendText("Text on red background");
richTextBox.SelectionBackColor = richTextBox.BackColor;
richTextBox.AppendText("Back to regular background");

现在,有许多 RichTextBox 不支持的 RichText 功能,例如行间距 - 为此的 IP/Invoked SendMessage 消息。

于 2013-03-20T12:31:11.703 回答