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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top