C# 如何在DatagridView滚动事件进行任何更改之前处理它

C# 如何在DatagridView滚动事件进行任何更改之前处理它,c#,datagridview,scroll,C#,Datagridview,Scroll,我正在尝试覆盖DatagridView上的滚动功能。 (具有固定行数的DGV,在滚动请求时使用新的“滚动”值刷新自身,而不是向下滚动到下一个值) 我需要自己对事件作出反应,并禁用DatagridView以对该事件作出反应(禁用它以滚动) 比如: protected override void OnScroll(ScrollEventArgs e) { ProcessScroll(e); //Distable DGV processing scroll r

我正在尝试覆盖DatagridView上的滚动功能。 (具有固定行数的DGV,在滚动请求时使用新的“滚动”值刷新自身,而不是向下滚动到下一个值)

我需要自己对事件作出反应,并禁用DatagridView以对该事件作出反应(禁用它以滚动)

比如:

protected override void OnScroll(ScrollEventArgs e)
{            
    ProcessScroll(e);

    //Distable DGV processing scroll request
    //base.OnScroll(e); 
}
但是,此事件在滚动完成后发生。例如,FirstDisplayedScrollingRowIndex在这一点上有新的值后滚动

所以,请问有没有人知道如何在这个事件发生任何变化之前做出反应,并禁用它来进行任何改变

我不能仅仅捕捉鼠标滚轮事件,或者检测预存键,因为当你们用鼠标选择单元格时,你们可以在DatagridView中滚动


谢谢

这没有经过测试,但是如何存储
FirstDisplayedScrollingRowIndex
的值,如果您想“禁用”滚动,只需为其指定上一个值即可

()

编辑: 测试后,这将使gridview滚动,但滚动条仍在滚动(不受影响)。 这让我想到了下一个建议:
如果您不想允许滚动网格视图,只需删除滚动条

this.gv.ScrollBars = ScrollBars.None;

你好,谢谢你的回答。是的,这是解决问题的可能方法,但是这总是会导致DGV滚动和对策反应。因此,您需要滚动DGV两次。我更可能试图捕捉滚动事件/请求并自己处理,避免DGV反应。@WhiteHead我已更新了我的答案。。。。我不知道这是不是你的意思。也许你最好详细说明一下你想要实现的目标。这将导致禁用DGV的滚动条,但是你没有更多的方法来使用DGV滚动。例如,向下翻页、箭头、按住ctrl键的箭头、选择可见范围以外的单元格等。所有这些都将导致滚动sdgv,这一点(无论是什么调用了此滚动)我不希望dgv执行滚动,而是刷新显示的值。在我的情况下,必须这样做:(