Wie kann ich die Position der Textgrundlinie in einem Label und ein NumericUpDown bekommen?
Frage
Ich versuche, ein Label
und NumericUpDown
von ihren Textgrundlinien auszurichten. Ich mache es in Code, anstatt die Designer. Wie erhalte ich die Position der Textgrundlinie?
Lösung
//, um Text mit Baseline an den Koordinaten (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);
Andere Tipps
Für das Label-Steuerelement, können Sie die Position des Bodens des Textes auf diese Weise erhalten:
.TextAlign Unter der Annahme zu TopLeft oder TopCenter oder TopRight eingestellt ist, kann der Boden des Textes in dem Label-Steuerelements durch dieses Verfahren gefunden werden:
dim btmOfText as single
btmOfText = Label1.Font.GetHeight + Label1.Top
Die .GetHeight Methode gibt die Höhe in Pixel ab der aktuellen Schriftart von der Label-Einsatz.
Wenn die .TextAlign Middle oder Bottom ist, dann müssen Sie eine etwas komplexere Berechnung tun.
Das gleiche Verfahren wird auch mit der Steuerung von NumericUpDown arbeiten.