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

时间:2009-06-17 09:42:37

标签: c# .net winforms alignment baseline

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

2 个答案:

答案 0 :(得分:14)

//在坐标(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);

答案 1 :(得分:2)

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

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

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

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

这个方法也适用于NumericUpDown控件。