質問者
RichTextBoxの高さを自動的に調節する方法

質問
-
RichTextBoxにはサイズを自動的に調節する機能が用意されていません。そこで、次のようなコードを作りましたが、うまく合いません。何が違っているのでしょうか?他に良い方法がありますか?教えてください。
form1にRichTextBox1を貼付け、fillでdockしました。RichTextBox1が編集された時に、フォントの高さと行数を元に必要な高さを計算し、form1の高さを変えます。form1の
Private Sub RichTextBox1_ContentsResized(ByVal sender As Object, ByVal e As System.Windows.Forms.ContentsResizedEventArgs) Handles RichTextBox1.ContentsResized
Me.Height = 30 + (currentMemo.Font.Height) * (currentMemo.GetLineFromCharIndex(currentMemo.TextLength) + 1)
すべての返信
-
エディタ系のコントロールで AutoSize のような動きをされるとちょっと違和感がありますが、
一応高さだけに限ってはできそうな感じです。最小のサイズと最大のサイズを決めておけば何とかなると思います。
ただし、フォントは全て統一してある必要があります。
横スクロールは一切考慮しておりません。
リッチな表現はできませんのでご了承ください。
' 一行の高さ
Private fontHeight As Single
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' 一行の高さを取得
Me.RichTextBox1.Text = "1" & ControlChars.NewLine & "2"
Me.fontHeight = Me.RichTextBox1.GetPositionFromCharIndex(Me.RichTextBox1.GetFirstCharIndexFromLine(1)).Y - Me.RichTextBox1.GetPositionFromCharIndex(Me.RichTextBox1.GetFirstCharIndexFromLine(0)).Y
Me.RichTextBox1.Text = String.Empty
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' RichTextBox の高さを自動調整
Dim line As Integer = Me.RichTextBox1.GetLineFromCharIndex(Me.RichTextBox1.TextLength) + 1
Me.RichTextBox1.Height = CInt(Me.fontHeight * line)
End Sub