gpt4 book ai didi

c# - 以编程方式递增滚动 datagridview 直到到达底部,然后滚动回顶部

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:28 24 4
gpt4 key购买 nike

我正在尝试以编程方式以 2 为增量滚动我的 Datagridview。当它到达底部时,我想将滚动重置回顶部。

这是我当前的代码:

private int scrollPosition = 0;

if(scrollPosition == 0)
{
// This means the scroll is at the top
scrollPosition+=2;

}
else if(scrollPosition > 0 && scrollPosition < dataGridView1.RowCount-1 -2)
{
// This means the scroll is somewhere in the middle
scrollPosition+=2;
}
else
{
// This means the scroll is at the bottom
scrollPosition = 0;

}
dataGridView1.FirstDisplayedScrollingRowIndex = scrollPosition;

该代码位于每 10 秒调用一次的方法中。

我试过调试代码。根据我所见,代码永远不会触发 else 语句。因此,它不会将滚动条重置回顶部。我做错了什么逻辑?

更新:我的错误,它在某个时候触发了 else 语句。但是当滚动已经在底部时它不会触发 else 语句。由于我的 Datagridview 中有 20 个条目,滚动位置需要一段时间才能接近该值。

在我的 scrollPosition 达到会触发 else 语句的值之前,Datagridview 滚动条已经位于底部。

是否有更准确的变量可以与我的 scrollPosition 进行比较?因此,当我的 Datagridview 滚动条已经位于底部时,它会在正确的时间触发 else 语句。

最佳答案

您的计算没有考虑显示的行数。

这里是计算它们的方法,前提是行都具有相同的高度:

rVisible = dataGridView1.Height / dataGridView1.Rows[0].Height - 1;

或者像马克建议的那样:

rVisible = dataGridView1.DisplayedRowCount(false);

现在您可以将滚动代码简化为:

if (dataGridView1.FirstDisplayedScrollingRowIndex + rVisible < dataGridView1.Rows.Count)
dataGridView1.FirstDisplayedScrollingRowIndex += 2;
else dataGridView1.FirstDisplayedScrollingRowIndex = 0;

不需要 scrollPosition 变量。

在您的原始解决方案中,您还可以检查 FirstDisplayedScrollingRowIndex 是否停止增长,一旦最后一行可见,它就会停止增长,但这更简单。如果行的高度不同,则应使用 DisplayedRowCount 或后一种方法,这样您就不必对不同的高度求和了。

关于c# - 以编程方式递增滚动 datagridview 直到到达底部,然后滚动回顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com