TextBoxコントロールのスクロールを操作する
2007 年 1 月 11 日 木曜日 by amanoC#(.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)メッセージでキャレット位置までスクロールさせる。( ゜Д゜)ウマー