改行を含めた文字列を
コンボボックス、テキストボックス、文字の描画の3つで表示
動作は
TextBox1に文字列を入力してButton1を押すと
ComboBox1に文字列がリストに追加されていく
そのリストから文字列を選択するとその文字列が
TextBox2とPictureBox1に表示される
TextBox1と2はプロパティのMultilimeをTrueにするだけで改行した複数行の
文字列を表示することができる、長い文字列が右端に到達すると折り返されて表示される、これは表示だけで改行はされていない
ComboBoxは見た目では改行が表示されないので複数行の表示はできないけど
改行自体は保存されているみたいで、ComboBoxの表示文字列をTextBoxに
表示するとしっかり改行される
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim str As String = Me.TextBox1.Text
If str = "" Then Exit Sub
Me.ComboBox1.Items.Add(str)
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim str As String = Me.ComboBox1.Text
If str = "" Then Exit Sub
Me.TextBox2.Text = str
Call DrawString()
End Sub
Private Sub DrawString()
Dim str As String = Me.TextBox2.Text
Dim myfont As New Font("Meiryo UI", 20)
Dim canvas As New Bitmap(1, 1)
Dim g As Graphics = Graphics.FromImage(canvas)
Dim drawSizeF As SizeF
Dim sFormat As New StringFormat
Dim p As New PointF(0, 0)
sFormat.FormatFlags = StringFormatFlags.NoClip
drawSizeF = g.MeasureString(str, myfont, p, sFormat)
canvas = New Bitmap(CInt(drawSizeF.Width), CInt(drawSizeF.Height))
g = Graphics.FromImage(canvas)
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
Dim rectF As New RectangleF(p, drawSizeF)
g.DrawString(str, myfont, Brushes.Aqua, rectF, sFormat)
Dim rect As Rectangle = Rectangle.Round(rectF)
rect.Size = New Size(rect.Width - 1, rect.Height - 1)
g.DrawRectangle(Pens.Red, rect)
Me.PictureBox1.Image = canvas
g.Dispose()
myfont.Dispose()
sFormat.Dispose()
End Sub
End Class
文字の描画範囲(四角形)を測るところの
drawSizeF = g.MeasureString(str, myfont, p, sFormat) 'サイズ取得!
今のPixtack紫陽花の文字の描画ではここを
drawSizeF = g.MeasureString(str, myfont, 3000, sFormat) 'サイズ取得!
ってかいている
3000は横幅の最大値で横3000
ピクセルを超えた描画部分は切り捨てにしている
今回のpは描画の起点座標をPoint(0,0)に指定している
これだと切り捨てられることはないからこっちのほうがいいかなあ
文字の描画部分
g.DrawString(str, myfont, Brushes.Aqua, rectF, sFormat) '描画範囲を指定して文字の描画!
改行した状態の文字列をそのまま描画する時は描画範囲にRectangleを指定すれば
いいだけみたい、楽ちん
テストはうまく行った
参照したところ
2日後