2009-06-17 5 views

Respuesta

13

// para representar el texto con la línea base en las coordenadas (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

Para el control de etiqueta, puede obtener la posición de la parte inferior del texto de esta manera:

Suponiendo que el .TextAlign se establece en topLeft o TopCenter o topright, la parte inferior del texto en el control de etiqueta se se encontró por este método:

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

el método .GetHeight devuelve la altura, en píxeles de la fuente de corriente utilizada por la etiqueta.
Si .TextAlign es Medio o Inferior, entonces necesita hacer un cálculo un poco más complejo.

Este mismo método también funcionará con el control NumericUpDown.

+0

GetHeight no devuelve la posición de la línea de base de la fuente, pero la posición de la parte superior de la Proxima linea. Las fuentes de Windoze están atornilladas de esta manera. No hay una respuesta simple aquí. – dar7yl

+0

Observé que Stewbob no estaba contento con mi voto negativo de su respuesta, y que ha tomado represalias al rechazar algunas de mis publicaciones. Estoy tomando el camino correcto aquí y no escalando esto en una guerra total. – dar7yl

+0

@ dar7yl ... Umm ... ¿quién eres tú? Veo que tienes comentarios para mi publicación, pero no entiendo la última. – Stewbob

Cuestiones relacionadas