Индекс видимых элементов в списке во время прокрутки - PullRequest
0 голосов
/ 07 марта 2012

Подскажите, пожалуйста, как я могу получить индекс первого видимого элемента в просмотре списка во время прокрутки. Допустим, у меня есть 100 элементов в списке просмотра, и в окне отображается только 5 элементов, потому что он слишком мал, затем я начинаю прокручивать элементы и вижу индекс первого (или любого) из этих 5 элементов, которые в данный момент видимы в списке. .

Спасибо.

Ответы [ 3 ]

0 голосов
/ 03 июля 2012

Вы можете просто просмотреть режим списка или деталей.С этого момента вы можете получить верхний элемент, а затем изменить его на предыдущий режим просмотра, например LargeIcon:

listview1.View = View.List;
ListViewItem topitem = listview1.TopItem;
listview1.View = View.LargeIcon;
0 голосов
/ 31 мая 2014
    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.Хорошо, что в этом нет необходимости проходить через каждый элемент, он просто вычисляет его с позиции первого элемента.

0 голосов
/ 07 марта 2012

Существует свойство TopItem, которое возвращает первый видимый элемент в элементе управления.

...