2014-10-02 55 views
2

有沒有辦法在控件中獲取繪製字符串的位置?當我繪製作爲標題的字符串時,我正在編寫一個充當GroupBox和I的控件,邊界線穿過它。 enter image description here使用StringFormat的字符串位置

爲了解決這個問題,我只是想填充和矩形的標題是與背面的顏色,所以標題似乎沒有被擊穿。我的問題是,標題的位置由StringFormat I通過Graphics.DrawString()方法傳遞。我不必顯式聲明字符串的位置,但我必須明確聲明矩形的位置,而且我不知道字符串的位置在哪裏。

我應該怎麼辦?

回答

2

我相信你可以使用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); 
} 
相關問題