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

このコードでは、フォントがコントロールの左上隅に描画されます (予想どおり)。

私の質問は、コントロールの中心に描画するにはどうすればよいですか?

4

2 に答える 2

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

私のためにそれをしました。

于 2012-07-27T15:19:49.703 に答える
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;
}
于 2012-07-27T18:14:08.897 に答える