我相信你可以使用MeasureCharacterRanges
精確測量弦位置
這裏是一個小例子:
做測量的方法:
public static RectangleF MeasureStringBounds(Graphics graphics, string text, Font font,RectangleF bounding, StringFormat format)
{
var ranges =new[] {new CharacterRange(0, text.Length)};
format.SetMeasurableCharacterRanges(ranges);
var regions = graphics.MeasureCharacterRanges(text, font, bounding, format);
var accurateBoundings = regions[0].GetBounds(graphics);
return accurateBoundings;
}
用法:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var str = "hello";
var format = new StringFormat {Alignment = StringAlignment.Center};
e.Graphics.DrawString(str, Font, new SolidBrush(Color.Black), new Rectangle(0, 0, Width, Height), format);
//measuring part
var region = MeasureStringBounds(e.Graphics, str, Font, new RectangleF(0, 0, Width, Height), format);
//Draw measured region
e.Graphics.DrawRectangle(new Pen(Color.Red), region.X, region.Y, region.Width, region.Height);
}