Вы можете выполнить итерацию с ListView.TopItem и проверить ListViewItem.Bounds свойство каждого элемента, находится ли он в клиентской области.
Better ListView Express - это бесплатный компонент, который также имеет свойство BottomItem , поэтому вы можете легко просматривать видимые элементы с помощью цикла для (если оба TopItem и BottomItem не null ):
for (int i = betterListView.TopItem.Index; i < betterListView.BottomItem.Index; i++)
{
// your code here
}
Вы можете попробовать это - он имеет тот же интерфейс, что и ListView, и имеет много улучшений по сравнению с .NET ListView.