・関数
''' <summary>
''' 指定幅分の文字列を取得
''' </summary>
''' <param name="intWidth">表示幅(px)</param>
''' <param name="strTarget">表示文字列</param>
''' <param name="fontTarget">表示フォント</param>
Private Function getStrFitWidth(ByVal intWidth As Integer,
ByVal strTarget As String,
ByRef fontTarget As Drawing.Font) As String
Dim result As String = ""
Try
For i = 0 To strTarget.Length - 1
Dim text As String = strTarget(i)
If Not String.IsNullOrEmpty(text) Then
Dim size As Drawing.SizeF = New Drawing.SizeF(Integer.MaxValue, Integer.MaxValue)
Dim bmap = New Drawing.Bitmap(1000, 100)
Using g As Drawing.Graphics = Drawing.Graphics.FromImage(bmap)
size = g.MeasureString(result & text, fontTarget)
End Using
If size.Width > intWidth Then
Exit For
End If
result &= text
End If
Next
Catch ex As Exception
Throw ex
End Try
Return result
End Function
1000×100のビットマップに1文字ずつ描いていきます。
MeasureStringでサイズ取得し、
指定幅を超えないよう文字を詰め込んで返します。
表示形式をカンマ表示などに変える場合は、
MeasureStringでStringFormatを指定して対応出来ます。
・フォント設定
Dim fName As String = "メイリオ"
Dim fSize As Single = 14
Dim fStyle As Drawing.FontStyle = Drawing.FontStyle.Regular
Dim fGraphicsUnit As Drawing.GraphicsUnit = Drawing.GraphicsUnit.Pixel
Dim fontTarget As Drawing.Font = New Drawing.Font(fName, fSize, fStyle, fGraphicsUnit)
FontStyleで太字など設定
GraphicsUnitでピクセル、ポイント設定
等幅フォントならバイト数で文字切れ対応出来るが、
等幅フォント以外は対応出来ないのでこちらを使用(=゚ω゚)ノ