【问题标题】: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);
}
}