Centrar el texto de alineación en un marco compacto?

Estoy tratando de dibujar un botón personalizado en un marco compacto, en la función 'OnPaint' hago algo como esto:

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)));
}

Con este código, la fuente se dibuja en la esquina superior izquierda del control (como se esperaba).

Mi pregunta es, ¿cómo puedo hacer que se centre en el control?

preguntado el 27 de julio de 12 a las 16:07

2 Respuestas

¡Lo averigué!

Para aquellos interesados,

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);

lo hizo por mi

Respondido 27 Jul 12, 16:07

Veo que ya tiene su respuesta, así que ni siquiera voy a probar para ver si esto funciona en dispositivos móviles.

Lo estoy publicando porque es una herramienta que encontré una vez y no veo muchas referencias a ella:

/// <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;
}

Respondido 27 Jul 12, 19:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.