Witam. Stworzyłem listBoxa opierającego się na liście dwukierunkowej. Dorobiłem do niego scrollbara ale o tym zaraz.
Na liście jednocześnie może wyświetlać się 14 elementów. Chcę poruszać suwakiem tak, aby na zerowej pozycji wyświetlał się pierwszy element jako pierwszy w listboxie, a jak dojadę do końca suwakiem aby na ostatniej pozycji w listboxie wyświetlał się ostatni element.
suwak porusza się względem osi Y w obszarze: (0, 140) i na jego aktualną pozycję wskazuje liczba "int y".
Ilość elementów w liście określa liczba "int ilosc_elementow".
liczba "double piksele" okresla, co ile pixeli ma nastąpić zmiana elementu.
Tak wygląda wzór określający numer elementu jaki ma zostać wyświetlony jako pierwszy na liście:
Na razie przyjmuję, że liczba elementów (x) jest: (x > 14 && x <= 140)
piksele = 140 / (ilosc_elementow - 14);
numer_elementu = int( y / piksele ); // to zostaje standardowo zaokrąglone w dół, co powinno dać dobry winik ale nie daje.
Do 34-tego elementu wszystko wyświetla się wyśmienicie, natomiast przy 35-tym elemencie jak przewinę do końca to numer_elementu = 23, czyli o 2 więcej niż ilość elementów. To jest conajmniej straszne :)
Pokazuję parę losowych wyników:
1a. (dobry wynik)
piksele = 46.66
ilosc = 17
y = 86
pierwszy = 1
ostatni = 15
1b. (dobry wynik)
piksele = 46.66
ilosc = 17
y = 140
pierwszy = 3
ostatni = 17
2a. (zły wynik)
piksele = 6.66
ilosc = 35
y = 30
pierwszy = 5 (wynik na kalkulatorze wyszedł 4.5, wiec zaokraglajac w dol powinno wyjsc 4)
2b. (zły wynik)
piksele = 6.66
ilosc = 35
y = 140
pierwszy = 23 (powinno byc 21, bo wynik wyszedl 21.02)
Jeżeli ma ktoś jakieś uwagi to proszę o pomoc. Jednocześnie wiem, że nigdy nie potrafię podać tych informacji co trzeba, więc jak potrzebujecie czegoś konkretnego piszcie.