|
分類:[VB.NET/VB2005 以降]
テキストボックスのMultilineをTrueに設定し、複数行表示をできるようにしていますが、
文字表示がテキストボックス内に収まらない場合のみ縦スクロールバーを表示するようにしたいと考えております。
良い方法がわからず、いろいろ考えてTextBox1の文字が変わった都度、イメージオブジェクトにテキストを描写した高さを測って、スクロールバーの表示を変えています。
ただ、TextBoxの内部スペースや、文字フォント・サイズにより正確ではなく、都度描写計測するのは非効率ですので、ほかに良い方法はありますでしょうか?
ご教示いただければ幸いです。
参考まで、現在のコードは以下のとおりです。
Public Class Form1
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim canvas As New Bitmap(TextBox1.Width, TextBox1.Height)
Dim g As Graphics = Graphics.FromImage(canvas)
Dim sf As New StringFormat
Dim DrawHeight As Integer = g.MeasureString(TextBox1.Text & vbCrLf, TextBox1.Font, TextBox1.Width, sf).Height
sf.Dispose()
g.Dispose()
If TextBox1.Height < DrawHeight And TextBox1.ScrollBars <> ScrollBars.Vertical Then
TextBox1.ScrollBars = ScrollBars.Vertical
ElseIf TextBox1.Height >= DrawHeight And TextBox1.ScrollBars <> ScrollBars.None Then
TextBox1.ScrollBars = ScrollBars.None
End If
TextBox1.ScrollToCaret()
End Sub
End Class
|