■55321 / inTopicNo.5) |
Re[3]: RichTextBoxの内部の高さ |
□投稿者/ たけ (2回)-(2010/11/26(Fri) 16:35:20)
|
みなさま、ありがとうございます。 いろいろ、試してみた結果、花ちゃんさんのやり方が良いようです。
入力中に動的にRichTextBoxの高さを変えるため、 そのままだと、カレットが移動するためか、 1文字おきに小さくなってしまいましたので、 別のRichTextBoxで取得するようにしました。
以下の処理に落ち着きました。
Dim LineHeight As Integer Dim dummyRtb As New RichTextBox dummyRtb.Size = RichTextBox1.Size dummyRtb.Rtf = RichTextBox1.Rtf With dummyRtb .Focus() .Height = 0 .SelectionStart = rtb.TextLength .ScrollToCaret() LineHeight = System.Math.Abs(.GetPositionFromCharIndex(0).Y) .Height = LineHeight + 6 'BorderStyle.None 以外の場合は、ここに枠分(6 ピクセル)の高さを足して下さい。 End With
ありがとうございました。 感謝です。
■No55277 (花ちゃん さん) に返信 > >EM_GETRECT,EM_SETRECTあたりを調べてみては > EM_GETRECT では、クライアント領域しか取得できなかったのと違いましたっけ。 > >>少し前に私が質問した内容ににているかも。 >>http://ap.atmarkit.co.jp/bbs/core/fdotnet/24494?page=1 > > そんな方無理やり見たいな方法使わなくても簡単に取得できます。 > 一度、下記を試して見て下さい。 > > 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 = 0 > .SelectionStart = RichTextBox1.TextLength > .ScrollToCaret() > LineHeight = System.Math.Abs(.GetPositionFromCharIndex(0).Y) > .Height = LineHeight + 6 'BorderStyle.None 以外の場合は、ここに枠分(6 ピクセル)の高さを足して下さい。 > End With > End Sub >
|
|