Ik heb momenteel twee listboxes. Het zijn overigens niet de oorspronkelijke listboxes van VB, maar die van VB2theMax; het heet ListEx en vind je hier:
http://www.vb2themax.com/mbgallery/Controls.aspx
Anyway, ik heb dus twee listboxes. De ene is als het ware een database en staat vol met allemaal items. De gebruiker kan een aantal van die items kiezen (niet perse tegelijk maar in eerste instantie één-voor-één) en die vervolgens slepen naar de tweede listbox.
In feite gebruik je daar de AddItem functie voor, ware het niet dat die vooral wordt gebruikt om een item onderaan de ListBox toe te voegen. ListEx heeft daar een oplossing voor: bij AddItem kan je een extra argument toevoegen die de ListIndex bepaalt. De volgende regel code zorgt er bijvoorbeeld voor dat een item wordt toevoegd op positie 6 (aangezien 0 meetelt dus de zevende plek); alle items eronder schuiven automatisch een plekje op:
Uiteraard is het de bedoeling dat de code aan de hand van de plek waar de gebruiker de muis loslaat bepaalt waar het gesleepte item precies tussen moet komen te staan. Doordat elk item een hoogte heeft van 300, kan je vrij eenvoudig bepalen waar de muis is, door middel van de variable Y, die de hoogte van de cursor aangeeft t.a.v. de top van het control. Dat gaat zo:
Het getal vijftien slaat overigens op de bovenste rand van het control, die je uiteraard niet mee wil tellen.
Deze code werkt prima, totdat het aantal items in de lijst zó lang wordt, dat er gescrolld moet worden. Indien er een verticale scrollbar komt en de gebruiker de situatie creëert waarin bijvoorbeeld de bovenste twee items niet zichtbaar zijn, zorgt bovenstaande code voor problemen. Het item zal twee plaatsen te hoog worden geplaatst.
Op een of andere manier zal ik dus moeten detecteren dat de gebruiker de scrollbar naar beneden heeft verplaatst. Het liefst heb ik een getal dat laat zien hoever de scrollbar verplaatst is, hoeveel pixels en/of items er buiten beeld zijn, etc.
Wie heeft enig idee hoe ik dit voor elkaar krijg? Hoe gaat dit met een gewone ListBox van VB?
Ik heb veel rondgezocht maar kan er niets van vinden en kan ook geen property of waarde vinden die zoiets weergeeft. Wat dat betreft ben ik ten einde raad en overweeg ik om een stel Labels onder elkaar te plaatsen in een Control Array met een losse scrollbar ernaast. Dan heb ik over alles controle, maar het is erg omslachtig...
Hoop dat iemand helpen kan!
http://www.vb2themax.com/mbgallery/Controls.aspx
Anyway, ik heb dus twee listboxes. De ene is als het ware een database en staat vol met allemaal items. De gebruiker kan een aantal van die items kiezen (niet perse tegelijk maar in eerste instantie één-voor-één) en die vervolgens slepen naar de tweede listbox.
In feite gebruik je daar de AddItem functie voor, ware het niet dat die vooral wordt gebruikt om een item onderaan de ListBox toe te voegen. ListEx heeft daar een oplossing voor: bij AddItem kan je een extra argument toevoegen die de ListIndex bepaalt. De volgende regel code zorgt er bijvoorbeeld voor dat een item wordt toevoegd op positie 6 (aangezien 0 meetelt dus de zevende plek); alle items eronder schuiven automatisch een plekje op:
code:
1
| ListEx1.Additem "teststring", 6 |
Uiteraard is het de bedoeling dat de code aan de hand van de plek waar de gebruiker de muis loslaat bepaalt waar het gesleepte item precies tussen moet komen te staan. Doordat elk item een hoogte heeft van 300, kan je vrij eenvoudig bepalen waar de muis is, door middel van de variable Y, die de hoogte van de cursor aangeeft t.a.v. de top van het control. Dat gaat zo:
code:
1
| ListEx1.AddItem "teststring", Int((y - 15) / 300) |
Het getal vijftien slaat overigens op de bovenste rand van het control, die je uiteraard niet mee wil tellen.
Deze code werkt prima, totdat het aantal items in de lijst zó lang wordt, dat er gescrolld moet worden. Indien er een verticale scrollbar komt en de gebruiker de situatie creëert waarin bijvoorbeeld de bovenste twee items niet zichtbaar zijn, zorgt bovenstaande code voor problemen. Het item zal twee plaatsen te hoog worden geplaatst.
Op een of andere manier zal ik dus moeten detecteren dat de gebruiker de scrollbar naar beneden heeft verplaatst. Het liefst heb ik een getal dat laat zien hoever de scrollbar verplaatst is, hoeveel pixels en/of items er buiten beeld zijn, etc.
Wie heeft enig idee hoe ik dit voor elkaar krijg? Hoe gaat dit met een gewone ListBox van VB?
Ik heb veel rondgezocht maar kan er niets van vinden en kan ook geen property of waarde vinden die zoiets weergeeft. Wat dat betreft ben ik ten einde raad en overweeg ik om een stel Labels onder elkaar te plaatsen in een Control Array met een losse scrollbar ernaast. Dan heb ik over alles controle, maar het is erg omslachtig...
Hoop dat iemand helpen kan!