Comment obtenir la position de la ligne de base du texte dans une étiquette et un NumericUpDown?
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?
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.