LabelおよびNumericUpDownのテキストベースラインの位置を取得するにはどうすればよいですか?

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

質問

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

役に立ちましたか?

解決

//座標(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);

他のヒント

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

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

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

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

この同じメソッドはNumericUpDownコントロールでも機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top