当列表可滚动时,有没有办法获取当前显示的第一个项目的索引?
我正在制作带有一些扩展名的CharMap,并发现ListView不能包含64k项目(参见下面的代码)
for (var i = char.MinValue; i < char.MaxValue; i++)
{
var c = Convert.ToChar(i);
if (!char.IsControl(c))
lv1.Items.Add(""+c);
}
因此决定在滚动处于某些适当的点(即第一个/最后15%)时加载字符,但ListView不会给出滚动条的绝对位置。
答案 0 :(得分:1)
它确实感觉有点hackish,但也许它会起作用:
int getFirstVisibleItem(ListView lv)
{
ListViewHitTestInfo HI;
for (int i = 0; i < Math.Min(lv.ClientSize.Width, lv.ClientSize.Height); i += 3)
{
HI = lv.HitTest(i, i);
if (HI.Item != null) return HI.Item.Index;
}
return -1;
}
这不会直接帮助您滚动问题,但应该找到您提出的第一个可见项目。如果你的物品有非常奇怪的(即非方形)形状,你可能想稍微改变一下travesal代码..
答案 1 :(得分:-1)
根据您的要求,使用自定义滚动条实现ListView。因此,您可以更好地控制滚动位置。您可以根据滚动位置决定何时执行操作。这可能会有所帮助Code