2013年03月28日

RichTextBox を下までスクロール

TextBox(またはRichTextBox)の最後の行までスクロールさせる に書いてある方法でスクロールさせても、スクロールバーをクリックして最下行までスクロールしたようにならず、少しずれる場合がある。自分の環境だけかもしれないが、ある程度 RichTextBox の高さがあるとずれてしまう。Rich ではない TextBox でこの問題があるかどうかは確認していない。

そこで、ScrollToCaret でスクロールさせたあとに Y の値を調整して解決する。

[System.Runtime.InteropServices.DllImport("USER32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wp, out Point lp);
private const int EM_GETSCROLLPOS = 0x04DD;
private const int EM_SETSCROLLPOS = 0x04DE;

this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
this.richTextBox1.Focus();
this.richTextBox1.ScrollToCaret();
Point p;
SendMessage(this.richTextBox1.Handle, EM_GETSCROLLPOS, 0, out p);
p.Y += value;
SendMessage(this.richTextBox1.Handle, EM_SETSCROLLPOS, 0, out p);

p.Y に足す value の適切な値については、計算式がわからないので、目で確認している。これはかなり格好が悪いので、計算で出せるようにしたい。

11/14 追記 続き を書いた。

posted by Takenoko at 19:00| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。