2012-07-27 74 views
0

我想畫在緊湊的框架自定義按鈕,在「的OnPaint」功能我做這樣的事情:在緊湊框架中居中對齊文本?

protected override void OnPaint(PaintEventArgs e) 
{ 
    System.Drawing.Imaging.ImageAttributes a = new  
    System.Drawing.Imaging.ImageAttributes(); 
    e.Graphics.DrawImage(pictureBox1.Image, new Rectangle(0, 0, Width, Height), 
         0, 0, Image.Width, Image.Height, GraphicsUnit.Pixel, a); 

    Brush b = new SolidBrush(Color.Black); 
    e.Graphics.DrawString(Text, Font, b, 0, 0, ( 
        new StringFormat(StringFormatFlags.NoWrap))); 
} 

這段代碼的字體抽取所控制的左上角(如預期)。

我的問題是,我怎樣才能得到它在控制中心?

回答

2

想通了!

對於那些有興趣,

float fontHeight = e.Graphics.MeasureString("ABC", Font).Height; 
e.Graphics.DrawString("ABC", Font, b, new RectangleF(0, Height/2.0f - fontHeight/2.0f, Width, Height), format); 

爲我做。

1

我看到你已經得到了你的答案,所以我甚至不會去測試它是否適用於移動設備。

我把它那裏,因爲它是一個工具,我遇到一次,我沒有看到它的許多參考:

/// <summary> 
/// [static method] Generates a StringFormat object based on the ContentAlignment object 
/// </summary> 
/// <param name="ca">ContentAlignment value from a System.Windows.Label object</param> 
/// <returns>StringFormat</returns> 
private static StringFormat GetStringFormatFromContentAllignment(ContentAlignment ca) { 
    StringFormat format = new StringFormat(); 
    switch (ca) { 
    case ContentAlignment.TopCenter: 
     format.Alignment = StringAlignment.Near; 
     format.LineAlignment = StringAlignment.Center; 
     break; 
    case ContentAlignment.TopLeft: 
     format.Alignment = StringAlignment.Near; 
     format.LineAlignment = StringAlignment.Near; 
     break; 
    case ContentAlignment.TopRight: 
     format.Alignment = StringAlignment.Near; 
     format.LineAlignment = StringAlignment.Far; 
     break; 
    case ContentAlignment.MiddleCenter: 
     format.Alignment = StringAlignment.Center; 
     format.LineAlignment = StringAlignment.Center; 
     break; 
    case ContentAlignment.MiddleLeft: 
     format.Alignment = StringAlignment.Center; 
     format.LineAlignment = StringAlignment.Near; 
     break; 
    case ContentAlignment.MiddleRight: 
     format.Alignment = StringAlignment.Center; 
     format.LineAlignment = StringAlignment.Far; 
     break; 
    case ContentAlignment.BottomCenter: 
     format.Alignment = StringAlignment.Far; 
     format.LineAlignment = StringAlignment.Center; 
     break; 
    case ContentAlignment.BottomLeft: 
     format.Alignment = StringAlignment.Far; 
     format.LineAlignment = StringAlignment.Near; 
     break; 
    case ContentAlignment.BottomRight: 
     format.Alignment = StringAlignment.Far; 
     format.LineAlignment = StringAlignment.Far; 
     break; 
    } 
    return format; 
}