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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック