Witam.
Wiem że nie jestem jedyny który ma taki problem (bo pełno takich pytań w necie), kłopot jednak w tym, że nikt nie udzielił sensownej odpowiedzi...
Ukryłem sobie stare scrolle z ListView i mam własne, ładniejsze. Problem jest taki że teraz muszę podpiąc te nowe ScrollBary do Listview.
Mam taki oto kod (w OnScroll ScrollBara):
ListView1.Items[ScrollBar.Position].MakeVisible(True);
Działa prawie jak trzeba. Problem polega na tym że ScrollBar zaczyna robić co do niego należy, dopiero wtedy gdy jego pozycja (Position), jest większa niż index ostatniego elementu jaki jest widoczny w ListView. Przykład:
ListView ma taki rozmiar że widać w nim tylko 4 elemety, a reszta jest schowana. Klikamy raz na ScrollBar, jego pozycja przeskakuje z 0 na 1, wtedy kod sprawia że element ListView o indexie 1 staje się widoczny, co w tym przypadku oznacza brak reakcji, bo element już jest widoczny!... Potem analogicznie pozycja 2,3,4 i dopiero przy tym ostatnim następuje oczekiwana reakcja, bo element listy o indexie 4 nie jest widoczny (przypominam że indexy liczą się od 0).
Moje pytanie, jak temu zaradzić? Jak zrobić żeby każde kliknięcie odsłanało nowy element, bez względu na to ile elementów jest aktualnie widocznych?
Próbowałem dodawać np:
ListView1.Items[ScrollBar.Position+3].MakeVisible(False);
Odnosi to prawidłowy skutek, ale tylko w jedną stronę. Gdy ScrollBar wraca od max do min, należało by liczę odejmować zamiast dodawać. Nie wiem jednak jak rozpoznać czy scrolling jest malejący czy rosnący...
Druga wada jest taka że trzeba wtedy dokładnie wiedzieć ile elementów jest aktualnie widocznych (da się to sprawdzić programowo?).
PS. Dlaczego ten cholerny ListView nie może mieć takiego wygodniego TopIndex jak w ListBox??? ;[
Pozdro.