Make portion of a Label's Text to be styled bold

Viewed 80220

Is there any way to make a part of a label.text to be bold?

label.text = "asd" + string;

Would like the string portion to be bold.

Is possible, how can this be done?

12 Answers

The following class illustrates how to do it by overriding OnPaint() in the Label class of WinForms. You can refine it. But what I did was to use the pipe character (|) in a string to tell the OnPaint() method to print text before the | as bold and after it as normal text.

class LabelX : Label
{
    protected override void OnPaint(PaintEventArgs e) {
        Point drawPoint = new Point(0, 0);

        string[] ary = Text.Split(new char[] { '|' });
        if (ary.Length == 2) {
            Font normalFont = this.Font;

            Font boldFont = new Font(normalFont, FontStyle.Bold);

            Size boldSize = TextRenderer.MeasureText(ary[0], boldFont);
            Size normalSize = TextRenderer.MeasureText(ary[1], normalFont);

            Rectangle boldRect = new Rectangle(drawPoint, boldSize);
            Rectangle normalRect = new Rectangle(
                boldRect.Right, boldRect.Top, normalSize.Width, normalSize.Height);

            TextRenderer.DrawText(e.Graphics, ary[0], boldFont, boldRect, ForeColor);
            TextRenderer.DrawText(e.Graphics, ary[1], normalFont, normalRect, ForeColor);
        }
        else {

            TextRenderer.DrawText(e.Graphics, Text, Font, drawPoint, ForeColor);                
        }
    }
}

Here's how to use it:

LabelX x = new LabelX();
Controls.Add(x);
x.Dock = DockStyle.Top;
x.Text = "Hello | World";       

Hello will be printed in bold and world in normal.

WinForms doesn't allow you to do that.

WebForms

Use Literal control, and add a <b> tag around the part of the text you want:

_myLiteral.Text = "Hello <b>big</b> world";

Winforms

Two options:

  1. Put two labels side by side (far easier)
  2. Subclass Label and do your own custom drawing in the OnPaint() method.

The second choice has been answered already.

Does it need to be a Label control, or do you just need to put text in a particular place? If the former, you'll need to do custom painting as other people have noted. If not, you could use a readonly RichTextBox instead.

The easy way to do what you want is just to add two labels. In this way you could make one bold, and it will look ok with a proper positioning.

The normal way would be to create a control that has two or more labels and you could set the properties on each one of them. Also this has the advantage that is reusable.

In WinForms override Label.OnPaint() method and draw the text your self.

In ASP.NET you could do:

label.Text = string.Format("asd <span style='font-weight: bold;'>{0}</span>", string);

But like everyone else says, depends on what you're using.

Related