Как получить положение базовой линии текста в метке и NumericUpDown? - PullRequest
10 голосов
/ 17 июня 2009

Я пытаюсь выровнять Label и NumericUpDown по их текстовым базовым линиям. Я делаю это в коде, а не дизайнер. Как я могу получить положение базовой линии текста?

Ответы [ 2 ]

14 голосов
/ 28 ноября 2011

// для визуализации текста с базовой линией в координатах (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);
2 голосов
/ 17 июня 2009

Для элемента управления Label вы можете получить положение нижней части текста следующим образом:

Предполагая, что для .TextAlign установлено значение TopLeft, TopCenter или TopRight, нижняя часть текста в элементе управления Label может быть найдена следующим способом:

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

Метод .GetHeight возвращает высоту в пикселях текущего шрифта, используемого меткой.
Если .TextAlign имеет значение Middle или Bottom, то вам нужно выполнить несколько более сложный расчет.

Этот же метод также будет работать с элементом управления NumericUpDown.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...