10

Labelaと aNumericUpDownをテキストのベースラインで揃えようとしています。デザイナーではなく、コードで行っています。テキストのベースラインの位置を取得するにはどうすればよいですか?

4

2 に答える 2

16

// 座標 (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);
于 2011-11-28T01:38:03.117 に答える
2

Label コントロールの場合、次の方法でテキストの下部の位置を取得できます。

.TextAlign が TopLeft または TopCenter または TopRight に設定されていると仮定すると、Label コントロールのテキストの下部は次の方法で見つけることができます。

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

.GetHeight メソッドは、Label で使用されている現在のフォントの高さをピクセル単位で返します。
.TextAlign が Middle または Bottom の場合は、もう少し複雑な計算を行う必要があります。

これと同じ方法は、NumericUpDown コントロールでも機能します。

于 2009-06-17T14:56:01.513 に答える