文字を中央に描画するには?

解決


きんぴら  2008-07-24 19:53:04  No: 145004

よろしくお願いします。
PictureBoxに文字を縦位置、横位置共に中央に描画させようと思っています。
描画した文字の位置が少しずれるので確認するために以下のコードを試しましたが、
原因と思われる余白が描画した四角形内にあります。
自分の書き方が悪いのか、このようなものなのか、アドバイスをお願いできますでしょうか。

Dim str As String = "100"
Dim stringFont As New Font("Arial", 16)
Dim TextSize As SizeF = e.Graphics.MeasureString(str, stringFont)
Dim DrawPoint As PointF = New PointF(100.0F, 100.0F)
e.Graphics.DrawString(str, stringFont, Brushes.Black, DrawPoint)
e.Graphics.DrawRectangle(Pens.Black, DrawPoint.X, DrawPoint.Y, TextSize.ToSize.Width, TextSize.Height)


魔界の仮面弁士  2008-07-24 21:53:38  No: 145005

> 中央に描画させようと思っています。
StringFormat 等の指定に問題があるのかな…。
中央揃えにするために、どのようなコードを書いていますか?

> .Graphics.MeasureString(str, stringFont)
2005 以降なら、TextRenderer.MeasureText なんてのもありますね。

> 原因と思われる余白が描画した四角形内にあります。
サンプルを実行してみましたが、仰る意味が良く分かりませんでした。
ずれるというのは、どの方向に、どの程度ずれているのでしょうか?
期待する結果と実際の結果を交えて説明してもらえると助かります。

# 例えば、文字列が "100" の場合と "100y" の場合では、
# ディセントの分だけ上下にズレが生じてしまっているとか、
# 固定ピッチではないフォントの場合だけ左右方向にズレている、とか。

とりあえず、文字列の描画の話なら、この辺り。
http://msdn.microsoft.com/ja-jp/library/aa735841.aspx
https://www.microsoft.com/japan/msdn/net/books/ProgWinVBNET/chapter17.aspx


きんぴら  2008-07-25 06:45:09  No: 145006

魔界の仮面弁士さんありがとうございます。
仰るとおり、StringFormat 等の指定でうまくいきました!

Dim strFormat As New StringFormat()
strFormat.Alignment = StringAlignment.Center
strFormat.LineAlignment = StringAlignment.Center

本当にありがとうございました(^^)。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加