C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: RichTextBoxの内部の高さ


(過去ログ 92 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■55247 / inTopicNo.1)  RichTextBoxの内部の高さ
  
□投稿者/ たけ (1回)-(2010/11/23(Tue) 12:38:55)

分類:[.NET 全般] 

以下の環境で、Windowsアプリケーションを開発しております。

Windows XP SP2
.NET Framework4
VB.NET

パネルに、RichTextBoxが貼ってあり、Dock=FIllにしてあります。
このパネルの大きさを、内部のRichTextBoxの内容に応じて、変更したいのです。
要件としては、RichTextBox部分のスクロールバーを出さずに、
内容に応じて画面を上下に大きくしたいのです。

以下のプロパティで検討してみたのですが、

RichTextbox.PreferredSize
RichTextbox.PreferredHeight
RichTextbox.ClientSize

フォントサイズが大きい文字がある場合に、
うまく大きさが取得できません。

内部のコントロールの高さが取得できれば、
それを、Panelの高さに設定すれば、うまくいくと思うのですが、
よい方法はないでしょうか?

引用返信 編集キー/
■55260 / inTopicNo.2)  Re[1]: RichTextBoxの内部の高さ
□投稿者/ やじゅ (1779回)-(2010/11/23(Tue) 21:21:47)
やじゅ さんの Web サイト
No55247 (たけ さん) に返信
> 要件としては、RichTextBox部分のスクロールバーを出さずに、
> 内容に応じて画面を上下に大きくしたいのです。
> 内部のコントロールの高さが取得できれば、

Win32APIを使うことになるけど
EM_GETRECT,EM_SETRECTあたりを調べてみては?

引用返信 編集キー/
■55274 / inTopicNo.3)  Re[1]: RichTextBoxの内部の高さ
□投稿者/ 山ちゃん (8回)-(2010/11/24(Wed) 23:01:34)
No55247 (たけ さん) に返信

少し前に私が質問した内容ににているかも。

http://ap.atmarkit.co.jp/bbs/core/fdotnet/24494?page=1
引用返信 編集キー/
■55277 / inTopicNo.4)  Re[2]: RichTextBoxの内部の高さ
□投稿者/ 花ちゃん (3回)-(2010/11/25(Thu) 00:30:31)
花ちゃん さんの Web サイト
>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

引用返信 編集キー/
■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
>
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -