public int firstVisible(ListView lv)
{
int i = 1;
try
{
while (lv.GetItemRect(i).X != 0) i++;
}
catch
{
return 0;
}
int rowWidth = i;
int rowHeight = lv.GetItemRect(i).Y - lv.GetItemRect(0).Y;
return -((int)lv.GetItemRect(0).Y / rowHeight) * rowWidth;
}
Возвращает первый видимый индекс списка.Я понятия не имею, есть ли что-то, что могло бы сломать это, это работает для того, что я делаю.Я только проверил это с LargeIcons.Хорошо, что в этом нет необходимости проходить через каждый элемент, он просто вычисляет его с позиции первого элемента.