我可以更改字符串的一部分的字体颜色吗?

时间:2014-07-31 02:55:07

标签: c# string winforms

我可以更改由m_pwdm_senior代表的以下字符串部分的颜色吗?

string m_pwd = "PWD";
string m_senior = "Senior";

lblMarquee.Text = "Hi" + m_senior + "and" + m_pwd;

5 个答案:

答案 0 :(得分:2)

您应该创建多个不同颜色的标签来创建它。如果您的目标是隐藏/显示标签以便于操作,则可以使用面板。

答案 1 :(得分:2)

你不能改变"颜色"一个字符串,就像你不能改变数字或列表的颜色或任何其他只存储值的数据类型。

您需要做的是修改该数据的可视化表示,在本例中为Label控件。来自Control的任何内容都有可用的ForeColorBackColor属性。

在WinForms中执行所需操作的简单方法是在Panel中将几个标签组合在一起,根据需要更改每个标签的颜色,然后将Panel作为单个实体进行操作必要时。

答案 2 :(得分:2)

Label控件一次只支持一个ForeColor。如果您需要同时处理多种颜色,可以设置一个水平流动的FlowLayoutPanel,然后在其中包含多个Label,颜色可以选择。它在编程方面并不是地球上最漂亮的解决方案,但我相信它应该适合你。

我说使用FlowLayoutPanel而不是Panel,因为这样可以使用可变长度的字符串,而不必担心定位。

从本质上讲,做这样的事情。当然,控件创建通常会出现在设计器中。但你看它是如何运作的。

FlowLayoutPanel flp = new FlowLayoutPanel();

Label lblA = new Label();
lblA.Text = "Hi ";
flp.Controls.Add(lblA);

Label lblB = new Label();
lblB.Text = m_senior;
lblB.ForeColor = Color.Red;
flp.Controls.Add(lblB);

Label lblC = new Label();
lblC.Text = " and "; // The spaces for this and "Hi " may or may not be necessary. They are in theory, but it's mostly dependent on the margins of the Labels. Just check which looks best.
flp.Controls.Add(lblC);

Label lblD = new Label();
lblD.Text = m_pwd;
lblD.ForeColor = Color.Red;
flp.Controls.Add(lblD);

答案 3 :(得分:0)

类似于Matthew Haugen在上面提供的答案,使用流程布局面板。但是在我的例子中,标签的创建是动态完成的。这可以通过应用任何拆分字符串并区分您想要的文本和您不使用的文本来实现。

FlowLayoutPanel flowPanel = new FlowLayoutPanel();
        string m_pwd = "PWD";
        string m_senior = "Senior";

        string toBeColored = "Hi " + m_senior + " and " + m_pwd;
        string[] splitColored = toBeColored.Split(' ');

        foreach (string s in splitColored)
        {
            Label l = new Label();
            l.Text = s;
            if (s == m_pwd)
            {
                l.ForeColor = Color.Red;
            }
            else if (s == m_senior)
            {
                l.ForeColor = Color.Blue;
            }

            flowPanel.Controls.Add(l);
        }
        this.Controls.Add(flowPanel); //was missing from earlier example 

注意:使视觉效果更加令我满意我建议根据您的应用调整流程布局面板

答案 4 :(得分:0)

这是我的,但这个是出于大门的目的

      lbl_PWD.ForeColor = Color.Red;
        lbl_senior.ForeColor = Color.Red;

        if (panel1.Right > 0)
        {
            panel1.Left = panel1.Left - 5;
        }
        else if (panel1.Right <= 0)
        {
            panel1.Left = this.Width;
        }