Graphics.MeasureCharacterRanges Method (String, Font, RectangleF, StringFormat)


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Gets an array of Region objects, each of which bounds a range of character positions within the specified string.

Namespace:   System.Drawing
Assembly:  System.Drawing (in System.Drawing.dll)

public Region[] MeasureCharacterRanges(
	string text,
	Font font,
	RectangleF layoutRect,
	StringFormat stringFormat


Type: System.String

String to measure.

Type: System.Drawing.Font

Font that defines the text format of the string.

Type: System.Drawing.RectangleF

RectangleF structure that specifies the layout rectangle for the string.

Type: System.Drawing.StringFormat

StringFormat that represents formatting information, such as line spacing, for the string.

Return Value

Type: System.Drawing.Region[]

This method returns an array of Region objects, each of which bounds a range of character positions within the specified string.

The regions returned by this method are resolution-dependent, so there might be a slight loss of accuracy if strings are recorded in a metafile at one resolution and later played back at a different resolution.

The following code example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of the Paint event handler. The code performs the following actions:

  • Sets a string "First and Second ranges" and a font for display of the string ("Times New Roman", 16 point).

  • Sets two character ranges within the string (which correspond to the words "First" and "Second").

  • Creates a rectangle in which to display the string.

  • Sets the formatting of the string ¾ including the two character ranges.

  • Draws the string to the screen.

  • Measures the character ranges, determines rectangles that bound the two specified ranges.

  • Draws the two rectangles to the screen.

The result is the displayed string with the first range ("First") bounded by a red rectangle and the second range ("Second") bounded by a blue rectangle.

      private void MeasureCharacterRangesRegions(PaintEventArgs e)

          // Set up string.
          string measureString = "First and Second ranges";
          Font stringFont = new Font("Times New Roman", 16.0F);

          // Set character ranges to "First" and "Second".
          CharacterRange[] characterRanges = { new CharacterRange(0, 5), new CharacterRange(10, 6) };

          // Create rectangle for layout.
          float x = 50.0F;
          float y = 50.0F;
          float width = 35.0F;
          float height = 200.0F;
          RectangleF layoutRect = new RectangleF(x, y, width, height);

          // Set string format.
          StringFormat stringFormat = new StringFormat();
          stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;

          // Draw string to screen.
          e.Graphics.DrawString(measureString, stringFont, Brushes.Black, x, y, stringFormat);

          // Measure two ranges in string.
          Region[] stringRegions = e.Graphics.MeasureCharacterRanges(measureString, 
stringFont, layoutRect, stringFormat);

          // Draw rectangle for first measured range.
          RectangleF measureRect1 = stringRegions[0].GetBounds(e.Graphics);
          e.Graphics.DrawRectangle(new Pen(Color.Red, 1), Rectangle.Round(measureRect1));

          // Draw rectangle for second measured range.
          RectangleF measureRect2 = stringRegions[1].GetBounds(e.Graphics);
          e.Graphics.DrawRectangle(new Pen(Color.Blue, 1), Rectangle.Round(measureRect2));

.NET Framework
Available since 1.1
Return to top