LabelおよびNumericUpDownのテキストベースラインの位置を取得するにはどうすればよいですか?
質問
テキストベースラインによって 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コントロールでも機能します。
所属していません StackOverflow