You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测RichTextBox向上滚动事件并关闭自动ScrollToCaret功能

解决方案

核心思路是仅当RichTextBox原本处于滚动底部时,追加文本后才执行自动滚动;如果用户手动向上滚动离开底部,就停止自动滚动,若后续用户滚回底部则恢复自动滚动。

实现代码

private Timer timer = new Timer();
public Form1()
{
    InitializeComponent();
    timer.Tick += AutoAppendText;
    timer.Interval = 500;
    timer.Start();
}

private void AutoAppendText(object sender, EventArgs e)
{
    // 判断当前是否处于滚动底部
    bool isAtBottom = richTextBox1.ClientSize.Height + richTextBox1.VerticalScroll.Value >= richTextBox1.VerticalScroll.Maximum;
    
    // 追加文本(添加换行符提升可读性)
    richTextBox1.AppendText($"{DateTime.Now:hh:mm:ss.fff} : Hello\r\n");
    
    // 仅在原本处于底部时执行自动滚动
    if (isAtBottom)
    {
        richTextBox1.ScrollToCaret();
    }
}

逻辑说明

  • isAtBottom 的判断逻辑:通过对比控件可见区域高度 + 当前滚动位置,与滚动条的最大可滚动值,来确定是否处于底部。
  • 这种方式无需额外监听滚动事件,且能自动恢复自动滚动(当用户手动滚回底部后,后续追加文本会继续自动滚动),交互体验更自然。

内容的提问来源于stack exchange,提问作者extreox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:42:11