c# - 用于在 System.Label 上准确放置文本的图形 DrawString

标签 c# graphics onpaint

我已经覆盖了 OnPaint我的方法Label VS2008 中的控件:

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 对象,并使用支持 RectangleF 的 DrawString 重载将其传递:

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

关于c# - 用于在 System.Label 上准确放置文本的图形 DrawString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593675/

相关文章:

c# - 如何从 .NET 中的 javascript 获取结果

c# - Asp.net MVC3 C#,StreamWriter 错误

java - 如果我有一个使用 mouselistener 的标签数组列表,那么单击标签时如何获取索引?

r - 在 R 中创建热图?

vb.net - 重写按钮上的 OnPaint - 字体不同

c# - 如何在C#中有效地在桌面上绘图?

c# - 在 C# 中从智能表中检索行数据

c# - Registry.LocalMachine.OpenSubKey() 返回 null

graphics - 有人知道好的图形变形代码或算法吗?

delphi - 如何制作透明背景的tmemo和Tedit?