我正尝试通过它们们的文本基线将一个 Label
和一个 NumericUpDown
对齐。这是在代码中实现,而非设计师。我该如何获取文本基线的位置?
// 在坐标 (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);
假设.TextAlign设置为TopLeft或TopCenter或TopRight,则可以通过以下方法找到Label控件中文本的底部:
dim btmOfText as single
btmOfText = Label1.Font.GetHeight + Label1.Top
.GetHeight方法返回标签所使用的当前字体的高度(以像素为单位)。
如果.TextAlign是中间或底部,则需要进行稍微复杂的计算。
这个相同的方法也适用于NumericUpDown控件。