2009-06-17 4 views

ответ

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.

+0

GetHeight не возвращает позицию базовой линии шрифта, но положение верхней части следующая строка. Шрифты Windoze прикручены таким образом. Здесь нет простого ответа. – dar7yl

+0

Я заметил, что Stewbob был недоволен моим downvoting его ответа, и откликается, опуская несколько моих постов. Я прохожу сюда по высокой дороге и не наращиваю ее в тотальную войну. – dar7yl

+0

@ dar7yl ... Умм ... кто ты? Я вижу, что у вас есть комментарии к моему сообщению, но я не понимаю последнего? – Stewbob