14

I'm trying to achieve framed texts (using Windows Forms), e.g.:

enter image description here

Height is always the same, because my strings are less than 20 chars. What about width? Is there any way to get it automatically?

2

2 Answers 2

19

Use Graphics.MeasureString()

From MSDN: http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

private void MeasureStringMin(PaintEventArgs e)
{
    // Set up string. 
    string measureString = "Measure String";
    Font stringFont = new Font("Arial", 16);

    // Measure string.
    SizeF stringSize = new SizeF();
    stringSize = e.Graphics.MeasureString(measureString, stringFont);

    // Draw rectangle representing size of string.
    e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height);

    // Draw string to screen.
    e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0));
}
Sign up to request clarification or add additional context in comments.

Comments

12

If you don't feel like dealing with the Paint eventhandler, you could try the TextRenderer class. It has a static method that is identical to the MeasureString() method in the above answer. In this class it is called MeasureText however.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.