在我的WinForm應用程序中,我有一個多行TextBox控件(uiResults),用於在處理大量項目時報告進度。使用AppendText非常適合在每次更新時自動滾動到底部,但如果用戶滾動回來讀取一些較舊的數據,我需要關閉自動滾動。如果可能,我寧願遠離P/Invoke調用。在添加行時維護TextBox滾動位置
是否有可能檢測用戶是否回滾而不使用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();
}
當垂直滾動條移動並且不通過AppendText觸發WM_VSCROLL時觸發。是否有不同的信息要捕捉? – 2012-04-16 16:48:06
@Brad Rem。沒有理解你的完整問題。更新。 – 2012-04-16 19:49:26