gpt4 book ai didi

c# - 添加行时保持 TextBox 滚动位置

转载 作者:太空狗 更新时间:2023-10-29 19:43:01 35 4
gpt4 key购买 nike

在我的 WinForm 应用程序中,我有一个多行文本框控件 (uiResults),用于在处理大量项目时报告进度。使用 AppendText 非常适合在每次更新时自动滚动到底部,但如果用户向后滚动以阅读一些较旧的数据,我需要关闭自动滚动。如果可能,我宁愿远离 P/Invoke 调用。

是否可以在不使用 P/Invoke 的情况下检测用户是否向后滚动?现在,我只检查 SelectionStart,它可以工作,但需要用户将插入符号从文本框的末尾移开以停止自动滚动:

if(uiResults.SelectionStart == uiResults.Text.Length)
{
uiResults.AppendText(result + Environment.NewLine);
}

我的主要问题是,当使用 Text 属性附加字符串时,文本框会滚动到开头。我试图通过存储插入符位置并在更新后重置和滚动到它来解决这个问题,但这会导致当前行移动到底部(当然,因为 ScrollToCaret 滚动不超过使插入符进入 View 所需的距离).

[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();
}

最佳答案

Auto-scrolling text box uses more memory than expected

问题中的代码完全符合您的要求。添加了文本,但仅当滚动条位于最底部时才会发生滚动。

关于c# - 添加行时保持 TextBox 滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175400/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com