2012-07-27 72 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; 
}