2009-06-17 5 views

Répondre

13

// pour rendre le texte avec la ligne de base aux coordonnées (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

Pour le contrôle de l'étiquette, vous pouvez obtenir la position du fond du texte ainsi:

En supposant que le .TextAlign est réglé sur TopLeft ou TopCenter ou TopRight, le fond du texte dans le contrôle de l'étiquette peut être trouvé par cette méthode:

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

la méthode .GetHeight retourne la hauteur en pixels de la police en cours utilisé par l'étiquette.
Si le .TextAlign est Middle ou Bottom, vous devez effectuer un calcul légèrement plus complexe.

Cette même méthode fonctionnera également avec le contrôle NumericUpDown.

+0

GetHeight ne retourne pas la position de la ligne de base de la police, mais la position du haut de la ligne suivante. Les polices Windoze sont vissées de cette manière. Il n'y a pas de réponse simple ici. – dar7yl

+0

J'ai remarqué que Stewbob était mécontent de mon downvoting de sa réponse, et a réagi en downvotant un certain nombre de mes messages. Je prends la haute route ici et ne pas escalader cela dans une guerre totale. – dar7yl

+0

@ dar7yl ... Umm ... qui êtes-vous? Je vois que vous avez des commentaires à mon poste, mais je ne comprends pas le dernier? – Stewbob

Questions connexes