winforms 如何检测RichTextBox的“向上滚动”事件

beq87vna  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在使用一个计时器将文本附加到richtextbox中并自动滚动到底部:

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

private void AutoAppendText(object sender, EventArgs e)
{
    richTextBox.AppendText($"{DateTime.Now:hh:mm:ss.fff} : Hello");
    richTextBox1.ScrollToCaret();
}

字符串
我希望当我向上滚动时,有没有什么方法可以关闭自动滚动到插入符号。

hrysbysz

hrysbysz1#

using System;
using System.Windows.Forms;

public class ScrollAwareRichTextBox : RichTextBox
{
    public event EventHandler ScrollUp;

    protected override void WndProc(ref Message m)
    {
        const int WM_VSCROLL = 0x115;
        const int SB_THUMBTRACK = 5;
        const int SB_THUMBPOSITION = 4;

        base.WndProc(ref m);

        if (m.Msg == WM_VSCROLL)
        {
            int scrollEventType = m.WParam.ToInt32() & 0xFFFF;
            if (scrollEventType == SB_THUMBTRACK || scrollEventType == SB_THUMBPOSITION)
            {
                OnScrollUp();
            }
        }
    }

    protected virtual void OnScrollUp()
    {
        ScrollUp?.Invoke(this, EventArgs.Empty);
    }
}

字符串

相关问题