Как получить положение базовой линии текста в метке и NumericUpDown?
Вопрос
Я пытаюсь выровнять 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);
Другие советы
Для элемента управления Label вы можете получить положение нижней части текста следующим образом:
Если предположить, что для .TextAlign задано значение TopLeft, TopCenter или TopRight, нижняя часть текста в элементе управления Label может быть найдена этим методом:
dim btmOfText as single
btmOfText = Label1.Font.GetHeight + Label1.Top
Метод .GetHeight возвращает высоту в пикселях текущего шрифта, используемого меткой.
Если .TextAlign имеет значение Middle или Bottom, то вам нужно выполнить несколько более сложный расчет.
Этот же метод также будет работать с элементом управления NumericUpDown.