检测用户是否正在滚动dataGridView滚动条

本文关键字:滚动 dataGridView 滚动条 用户 是否 检测 | 更新日期: 2023-09-27 18:26:34

我正在使用用新的DataTable更新dataGridView

dataGridView1.DataSource = table

然而,当用户滚动dataGridView时,我不想这样做。如何检查滚动条是否正在滚动或已完成滚动(即拖动而不是单击)?

我看过Scroll事件,但它似乎只在第一次单击滚动条而未完成时触发。谷歌搜索似乎也没有提出太多具体的内容。

检测用户是否正在滚动dataGridView滚动条

我过去曾通过对DataGridView类进行子类化并使用它而不是DataGridView来实现这一点。

public class DataGridViewEx : DataGridView
{
    public bool IsUserScrolling { get; private set; }
    private const int WM_HSCROLL = 0x0114;
    private const int WM_VSCROLL = 0x0115;
    private const int SB_ENDSCROLL = 8;
    public event EventHandler UserScrollComplete;
    protected virtual void OnUserScrollComplete()
    {
        EventHandler handler = UserScrollComplete;
        if (handler != null) handler(this, EventArgs.Empty);
    }
    protected override void WndProc(ref Message m)
    {
        // http://msdn.microsoft.com/en-us/library/windows/desktop/bb787575(v=vs.85).aspx
        // http://msdn.microsoft.com/en-us/library/windows/desktop/bb787577(v=vs.85).aspx
        if ((m.Msg == WM_HSCROLL) ||
            (m.Msg == WM_VSCROLL))
        {
            short loword = (short)(m.WParam.ToInt32() & 0xFFFF);
            if (loword == SB_ENDSCROLL)
            {
                IsUserScrolling = false;
                OnUserScrollComplete();
            }
            else
            {
                IsUserScrolling = true;
            }
        }
        base.WndProc(ref m);
    }
}