我试图在标签中显示不同颜色的字符串如何执行此操作..?

时间:2013-12-12 07:11:08

标签: c# winforms visual-studio-2010 c#-4.0

IDE = Visual Studio 2010  
Language = c# .net   
Technology = windows forms application  

您好, 我有3个标签

Label1详细信息:

label1.text = "Team1";  
label1.forecolor = Color.yellow; 

Label2详细信息:

label2.text = "Team1";  
label2.forecolor = Color.green;

Label3详细信息:

label3.text = "Team1";  
label3.forecolor = Color.grey;  

现在,我正在尝试的是:

label4.text = "Match between " + label1.text+ " and " +label2.text+ " at " +label3.text         ;  

但是我输出的所有标签都是相同的颜色,设置为label4。 我希望它以不同的颜色显示。

我尝试过这种解决方案,将不同的标签放在表格中,但它会重叠。

有没有办法连接标签..?

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

如果您有意愿,可以创建一个UserControl并覆盖其OnPaint函数,使用GDI +以不同的颜色绘制这3个文本块。它只需要一个简单的DrawString电话。

e.Graphics.DrawString("LabelText", this.Font, Brushes.Red, new Point(100, 100));

然后,您可以公开3个公共属性来控制3个文本块和可选的3个颜色属性来控制块的颜色。请注意,您需要使用SolidBrush中的这些颜色创建OnPaint,因为这是DrawString所期望的,如下所示:

using(SolidColorBrush br = new SolidColorBrush(mColor1)
    e.Graphics.DrawString("LabelText", this.Font, br, new Point(100, 100));

完整代码:

public partial class MultiColorLabel : Label
{
    public MultiColorLabel()
    {
        InitializeComponent();
    }

    public string Text1 { get; set; }
    public string Text2 { get; set; }
    public string Text3 { get; set; }

    public Color Color1 { get; set; }
    public Color Color2 { get; set; }
    public Color Color3 { get; set; }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        var g = e.Graphics;

        e.Graphics.DrawString("Match between ", this.Font, Brushes.Black, 0, 0);
        var sz = g.MeasureString("Match between ", this.Font).Width;

        using (SolidBrush sb = new SolidBrush(Color1))
            e.Graphics.DrawString(Text1, this.Font, sb, sz, 0);

        sz += g.MeasureString(Text1, this.Font).Width;

        e.Graphics.DrawString(" and ", this.Font, Brushes.Black, sz, 0);
        sz += g.MeasureString(" and ", this.Font).Width;

        using (SolidBrush sb = new SolidBrush(Color2))
            e.Graphics.DrawString(Text2, this.Font, sb, sz, 0);

        sz += g.MeasureString(Text2, this.Font).Width;

        e.Graphics.DrawString(" at ", this.Font, Brushes.Black, sz, 0);
        sz += g.MeasureString(" at ", this.Font).Width;

        using (SolidBrush sb = new SolidBrush(Color3))
            e.Graphics.DrawString(Text3, this.Font, sb, sz, 0);
    }
}

这是快照:

enter image description here

答案 1 :(得分:0)

Label.Text只返回一个不是任何格式的字符串。因此,这里的所有文本都将具有相同的label4颜色。您需要在面板控件中添加标签。

答案 2 :(得分:0)

问题:您只是分配其他Text控件的Label,因此它只会显示Text,但会显示其他属性,例如ForeColor })不会被应用。

解决方案:在我看来,我认为不能直接为单个Label字符串显示多个colurs。

因此,您可以开发自己的User Control以显示多个控件中的文本。

您可以使用RichTextBox控件。

答案 3 :(得分:-1)

Text`不会返回整个标签,它只会返回该标签的文本(字符串)。如果你想做你想做的事情,请阅读一些关于图形的帖子。