将文本精确放置在 System.Label 上的图形 DrawString

2024-02-13

我已经覆盖了OnPaint https://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx我的方法Label https://msdn.microsoft.com/en-us/library/system.windows.controls.label.label.aspxVS2008中的控制:

void Label_OnPaint(object sender, PaintEventArgs e) {
  base.OnPaint(e);
  dim lbl = sender as Label;
  if (lbl != null) {
    string Text = lbl.Text;
    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    if (myShowShadow) { // draw the shadow first!
      e.Graphics.DrawString(Text, lbl.Font, new SolidBrush(myShadowColor), myShadowOffset, StringFormat.GenericDefault);
    }
    e.Graphics.DrawString(Text, lbl.Font, new SolidBrush(lbl.ForeColor), 0, 0, StringFormat.GenericDefault);
  }
}

这可行,但我真的想知道如何使文本垂直和水平居中。我听说过MeasureString()方法,但我的“文本”使事情变得复杂,因为它可能包含分页符。

有人可以指导我如何做到这一点吗?


或者您可以创建自己的StringFormat对象并使用重载传递它DrawString支持 RectangleF:

StringFormat formatter = new StringFormat();
formatter.LineAlignment = StringAlignment.Center;
formatter.Alignment = StringAlignment.Center;

RectangleF rectangle = new RectangleF(0, 0, lbl.Width, lbl.Height);

e.Graphics.DrawString(Text, lbl.Font, new SolidBrush(lbl.ForeColor), rectangle, formatter);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文本精确放置在 System.Label 上的图形 DrawString 的相关文章

随机推荐