TextBoxコントロールのスクロールを操作する

C#(.NET (Compact) Framework)のTextBoxコントロールは複数行のテキストを扱えるがスクロールを操作するメソッドが見当たらない。IRCのチャット表示領域で、末尾に新着テキストを追加していってもスクロールバーはずっと最上段にいて新着を表示できない、Selectメソッドでカーソル動かしてもスクロールバーは動かない、さて困った…ってところでググっていたのだけど、C#からWin32 APIを呼べるのくわーと知ったので(←C#は初めて使用)、直接エディットコントロールを操作することに。
まずは、エディットコントロールを操作するにはウィンドウメッセージを送りつけなくてはならないので SendMessage APIを呼べるようにクラス内で宣言する。

[DllImport("coredll.dll")] extern static int SendMessage(IntPtr handle,
uint msg, uint wparam,uint lparam);

Windows Mobile 5.0がターゲットなのでcoredll.dllだけど、通常のWindowsなら kernel32.dll で。
すると、SendMessageが使えるようになるので、エディットコントロールにまつわるウィンドウメッセージ(EM系)を使ってスクロールさせてしまえばよい。
IRCの新着テキストを末尾に追加してそこまでスクロールできればよいので、

ChatTextBox.Select(ChatTextBox.Text.Length, 0);

末尾にカーソルを移動させて、

SendMessage(ChatTextBox.Handle, 0x00B7, 0, 0);

EM_SCROLLCARET(0x00b7)メッセージでキャレット位置までスクロールさせる。( ゜Д゜)ウマー

コメントをどうぞ