Я пытаюсь выровнять Label
и NumericUpDown
по их исходным текстам. Я делаю это в коде, а не в дизайнере. Как получить позицию исходного текста?Как получить позицию базовой линии текста в ярлыке и NumericUpDown?
10
A
ответ
13
// для визуализации текста с исходным в точке с координатами (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
Для контроля этикетки, вы можете получить позицию нижней части текста таким образом:
Предполагая .TextAlign установлен в TopLeft или TopCenter или TopRight, в нижней части текста в элементе управления Этикетка может можно найти с помощью этого метода:
dim btmOfText as single
btmOfText = Label1.Font.GetHeight + Label1.Top
метод .GetHeight возвращает высоту, в пикселях текущего шрифта, используемого Label.
Если .TextAlign является средним или нижним, вам нужно сделать несколько более сложный расчет.
Этот же метод также будет работать с элементом управления NumericUpDown.
GetHeight не возвращает позицию базовой линии шрифта, но положение верхней части следующая строка. Шрифты Windoze прикручены таким образом. Здесь нет простого ответа. – dar7yl
Я заметил, что Stewbob был недоволен моим downvoting его ответа, и откликается, опуская несколько моих постов. Я прохожу сюда по высокой дороге и не наращиваю ее в тотальную войну. – dar7yl
@ dar7yl ... Умм ... кто ты? Я вижу, что у вас есть комментарии к моему сообщению, но я не понимаю последнего? – Stewbob