Comment obtenir la position de la ligne de base du texte dans une étiquette et un NumericUpDown?

StackOverflow https://stackoverflow.com/questions/1006069

Question

J'essaie d'aligner une étiquette et un NumericUpDown sur leurs lignes de base de texte. Je le fais dans le code, plutôt que le concepteur. Comment puis-je obtenir la position de la ligne de base du texte?

Était-ce utile?

La solution

// pour rendre le texte avec une 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);

Autres conseils

Pour le contrôle Label, vous pouvez obtenir la position du bas du texte de cette façon:

En supposant que .TextAlign soit défini sur TopLeft ou TopCenter ou TopRight, le bas du texte du contrôle Label peut être trouvé par cette méthode:

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

La méthode .GetHeight renvoie la hauteur, en pixels, de la police actuellement utilisée par le libellé.
Si .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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top