【问题标题】:Detect if user is scrolling dataGridView scrollbar检测用户是否正在滚动 dataGridView 滚动条
【发布时间】:2014-10-15 15:58:09
【问题描述】:

我正在使用新的 DataTable 更新 dataGridView

dataGridView1.DataSource = table

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

我查看了 Scroll 事件,但它似乎仅在第一次单击滚动条但未完成时触发。谷歌搜索似乎也没有具体说明这一点。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    我过去通过子类化 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多