Come posso ottenere la posizione della linea di base del testo in un'etichetta e in NumericUpDown?

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

Domanda

Sto cercando di allineare un Label e un NumericUpDown in base alle loro basi di testo. Lo sto facendo in codice, piuttosto che nel designer. Come posso ottenere la posizione della linea di base del testo?

È stato utile?

Soluzione

// per eseguire il rendering del testo con la linea di base alle coordinate (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);

Altri suggerimenti

Per il controllo Etichetta, puoi ottenere la posizione della parte inferiore del testo in questo modo:

Supponendo che .TextAlign sia impostato su TopLeft o TopCenter o TopRight, la parte inferiore del testo nel controllo Etichetta può essere trovata con questo metodo:

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

Il metodo .GetHeight restituisce l'altezza, in pixel del carattere corrente utilizzato dall'etichetta.
Se .TextAlign è Medio o Basso, è necessario eseguire un calcolo leggermente più complesso.

Questo stesso metodo funziona anche con il controllo NumericUpDown.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top