- 日時: 2011/03/22 10:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[リッチテキストボックス][][] * * キーワード:表示高さ,文字高さ,行高さ,コントロールの高さ,, * *********************************************************************************** タイトル : RichTextBoxの内部の高さ 記 事 No : 55247 投 稿 日 : 2010/11/23(Tue) 12:38:55 元質問者 : たけ
パネルに、RichTextBoxが貼ってあり、Dock=FIllにしてあります。 このパネルの大きさを、内部のRichTextBoxの内容に応じて、変更したいのです。 要件としては、RichTextBox部分のスクロールバーを出さずに、 内容に応じて画面を上下に大きくしたいのです。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=55247&KLOG=92
上記サイトの質問に答えて作ったものです。 -------------------------------------------------------------------------------------- 記事No : 55277 投稿日 : 2010/11/25(Thu) 00:30:31 回答者 : 花ちゃん -------------------------------------------------------------------------------------- Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load With RichTextBox1 .BorderStyle = BorderStyle.None .ScrollBars = RichTextBoxScrollBars.None .LoadFile("test.rtf", RichTextBoxStreamType.RichText) End With End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim LineHeight As Integer With RichTextBox1 .Focus() .Height = 1 .SelectionStart = RichTextBox1.TextLength .ScrollToCaret() LineHeight = System.Math.Abs(.GetPositionFromCharIndex(0).Y) 'EM_GETSCROLLPOS と同様の動作 .Height += LineHeight .SelectionStart = 1 End With ' BorderStyle.None 以外で計測した場合は、枠分(6 ピクセル OS のスタイルによって違う)を ' 計測値に付加して広げてください。 ' 同じく、RichTextBoxScrollBars.None 以外で計測した場合は、スクロールバーの高さ・幅分を ' (17 ピクセル程度 正確には、サンプルNo.357 参照)計測値に付加して広げるようにしてください。 End Sub
TextBox の場合、使用するフォントが一定なので、文字の高さと行数を調べれば、 トータル行高さが簡単に求める事できるが、RichTextBox の場合は、1文字毎に 使用するフォントが違う場合があるので、簡単に計測する方法が無い、色々調べて、 試している内にEM_GETSCROLLPOS で計測できる事を発見し、EM_GETSCROLLPOS と 同様の動作のRichTextBox.GetPositionFromCharIndex メソッド を使って測定。 (但し、この使い方が特殊) 実際に試して見ると解るが、スクロールバーの移動量等やTopに表示している行等を 調べても取得できそうだが、最後の行分だけがどうしても正しく取得する事ができない等 結構難しいです。
|