Como faço para obter a posição da linha de base de texto em um rótulo e um NumericUpDown?

votos
10

Eu estou tentando alinhar um Labele um NumericUpDownpor suas linhas de base de texto. Estou fazendo isso no código, em vez do designer. Como faço para obter a posição da linha de base de texto?

Publicado 17/06/2009 em 10:42
fonte usuário
Em outras línguas...                            


2 respostas

votos
13

// para processar texto com base nas coordenadas (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);
Respondeu 28/11/2011 em 02:38
fonte usuário

votos
2

Para o controlo de etiqueta, você pode obter a posição do fundo do texto desta forma:

Assumindo que o .TextAlign é definido como TopLeft ou TopCenter ou TopRight, a parte inferior do texto no controlo de etiqueta podem ser encontrados por este método:

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

O método .GetHeight retorna a altura, em elementos de imagem da fonte de corrente usada pela etiqueta.
Se o .TextAlign é Médio ou inferior, então você precisa fazer um cálculo um pouco mais complexo.

Esse mesmo método também irá trabalhar com o controle NumericUpDown.

Respondeu 17/06/2009 em 15:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more