【问题标题】:How to handle DatagridView scroll event before it makes any changes如何在进行任何更改之前处理 DatagridView 滚动事件
【发布时间】:2014-06-19 09:53:21
【问题描述】:

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

我需要对事件做出反应并禁用 DatagridView 对事件做出反应(禁用它以滚动)。

类似:

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

    //Distable DGV processing scroll request
    //base.OnScroll(e); 
}

但是,此事件在滚动完成后发生。例如,此时的 FirstDisplayedScrollingRowIndex 在滚动后具有新值。

所以请任何人知道如何在此事件进行任何更改之前对其做出反应,并禁用它以进行任何更改?

我不能只捕捉鼠标滚轮事件或检测按下的键,因为您可以在通过鼠标选择单元格时滚动 DatagridView。

谢谢

【问题讨论】:

    标签: c# datagridview scroll


    【解决方案1】:

    这没有经过测试,但是如何存储FirstDisplayedScrollingRowIndex 的值并以防万一您想“禁用”滚动,只需为其分配先前的值即可。

    (source)

    编辑: 经过测试,这将使gridview nto滚动,但滚动条仍在滚动(没有影响)。 这让我想到了下一个建议:
    如果您不想滚动网格视图,只需移除滚动条...

    this.gv.ScrollBars = ScrollBars.None;
    

    【讨论】:

    • 您好,感谢您的回答。是的,这是解决问题的可能方法,但这总是会导致 DGV 滚动和对策反应。所以你需要滚动 DGV 两次。我更有可能尝试捕获滚动事件/请求并自己处理它并避免 DGV 反应。
    • @WhiteHead 我已经更新了我的答案......我不确定这是否是你的意思。如果您详细说明您要达到的目标,也许会是最好的。
    • 这将导致禁用 DGV 的滚动条,但是您还有更多使用 dgv 滚动的方法。例如向下翻页、箭头、带有 ctrl 的箭头、选择可见范围之外的单元格等。这一切都会导致滚动 sdgv 并且这一点(不管是什么调用了这个滚动)我不希望 dgv 执行滚动但刷新显示的值.在我的情况下必须这样做:(
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多