私の WinForm アプリケーションには、多数のアイテムの処理中に進行状況を報告するために使用される複数行の TextBox コントロール (uiResults) があります。AppendText を使用すると、更新のたびに自動的に一番下までスクロールできますが、ユーザーがスクロールして古いデータを読む場合は、自動スクロールをオフにする必要があります。可能であれば、P/Invoke 呼び出しを避けたいと思います。
P/Invoke を使用せずにユーザーがスクロール バックしたかどうかを検出することは可能ですか? 今のところ、動作する SelectionStart を確認するだけですが、自動スクロールを停止するには、ユーザーがキャレットをテキストボックスの最後から移動する必要があります。
if(uiResults.SelectionStart == uiResults.Text.Length)
{
uiResults.AppendText(result + Environment.NewLine);
}
私の主な問題は、Text プロパティを使用して文字列を追加すると、テキスト ボックスが先頭にスクロールされることです。キャレットの位置を保存し、更新後にリセットしてスクロールすることでこれを解決しようとしましたが、これにより現在の行が一番下に移動します(もちろん、ScrollToCaretはキャレットを表示するために必要な距離を超えてスクロールしないため) )。
[Continued from above]
else
{
int pos = uiResults.SelectionStart;
int len = uiResults.SelectionLength;
uiResults.Text += result + Environment.NewLine;
uiResults.SelectionStart = pos;
uiResults.SelectionLength = len;
uiResults.ScrollToCaret();
}