如何在Label和NumericUpDown中获取文本基线的位置?

我正在尝试按照文本基线对齐LabelNumericUpDown 。 我是用代码而不是设计师来做的。 如何获得文本基线的位置?

//在坐标(pt.X,pt.Y)处渲染带有基线的文本:

 Font myFont = Label1.Font; FontFamily ff = myFont.FontFamily; float lineSpace = ff.GetLineSpacing(myFont.Style); float ascent = ff.GetCellAscent(myFont.Style); float baseline = myFont.GetHeight(ev.Graphics) * ascent / lineSpace; PointF renderPt = new PointF(pt.X, pt.Y - baseline)); ev.Graphics.DrawString("Render this string", myFont, textBrush, renderPt); 

对于Label控件,您可以通过以下方式获取文本底部的位置:

假设.TextAlign设置为TopLeft或TopCenter或TopRight,可以通过此方法找到Label控件中文本的底部:

 dim btmOfText as single btmOfText = Label1.Font.GetHeight + Label1.Top 

.GetHeight方法返回Label使用的当前字体的高度(以像素为单位)。
如果.TextAlign是Middle或Bottom,那么您需要进行稍微复杂的计算。

同样的方法也适用于NumericUpDown控件。