Ik ben op dit moment bezig om een klein programmaatje te schrijven voor iemand in vb.net
Kort samengevat komt het er op neer dat er een kleurenpalet van 256 kleuren getoond wordt (palet), welke 'gedragged' kunnen worden naar een group van 16 labels. Deze 16 kleuren/labels kleuren vervolgens een plaatje.
globaal idee hoe het form eruit ziet (' <tekst> = beschrijving):
de 256 kleuren in het palet zijn labels, die allemaal hun eigen kleur hebben. Deze 256 labels worden dynamisch aangemaakt (omdat .net geen control arrays ondersteund) en met addhandler worden de mouseclick en mousemove events op de labels gezet.
Als dragdrop voorbeeld gebruik ik voorbeeld code zoals op de microsoft site.
Even kort schematisch wat er gebeurd:
1) user dragged een kleur uit het 256 kleuren palet en dropped dit op een van de 16 labels c0..c15
2) dragdrop event zet de backcolor voor label waarop gedropped is
3) het label waarop gedropped is, genereert een BackColorChanged event.
4) in de c[n].BackColorChanged event code, zet ik het textlabel op de juiste waarde.
Nu het probleem:
Als ik, voordat ik het label in de c[n].BackColorChanged event code zet, eerst wat andere zaken doe, wordt er halverwege deze procedure eruit gesprongen omdat een label uit het 256 kleurenpalet kennelijk weer een 'mousemove' event gekregen heeft.
Als de BackColorChanged() er als volgt uit ziet:
Wat ik dus zoek is een manier om de applicatie te laten wachten tot alle events afgerond zijn.
Een 2e zijdelingse vraag, is het draggen in vb.net echt zo beroerd geimplementeerd dat je met een globale variable moet controleren of de gebruiker aan het draggen is?
Wat heb ik al gedaan:
Microsoft site doorgespit
Google gebruikt, gezocht op "block events", "hold events", "wait for events to finish", "cascaded events" etc
Op Got gezocht op ["Vb.net" events]
Samengevat:
event1 genereert event2, terwijl event2 code wordt uitgevoerd, komt er een nieuwe event1 binnen welke ervoor zorgt dat event2 code niet verder uitgevoerd wordt.
Hoef geen uitgebreide code, als iemand mijn neus de juiste richting op kan zetten, kom ik er verder wel uit.
Kort samengevat komt het er op neer dat er een kleurenpalet van 256 kleuren getoond wordt (palet), welke 'gedragged' kunnen worden naar een group van 16 labels. Deze 16 kleuren/labels kleuren vervolgens een plaatje.
globaal idee hoe het form eruit ziet (' <tekst> = beschrijving):
code:
c0 - c15 tonen de kleuren die door de gebruiker geselecteerd zijn1
2
3
4
| [256 kleuren palet] ' 256 gekleurde labels [c0] [c1] [c2] .. [c15] ' de 16 kleuren welke in het plaatje gebruikt worden [t0] [t1] t2] .. [t15] ' t0 - t15 zijn text labels welke de index van de gekozen kleur uit het palet van 256 aangeeft. [img] ' het plaatje |
de 256 kleuren in het palet zijn labels, die allemaal hun eigen kleur hebben. Deze 256 labels worden dynamisch aangemaakt (omdat .net geen control arrays ondersteund) en met addhandler worden de mouseclick en mousemove events op de labels gezet.
Als dragdrop voorbeeld gebruik ik voorbeeld code zoals op de microsoft site.
Even kort schematisch wat er gebeurd:
1) user dragged een kleur uit het 256 kleuren palet en dropped dit op een van de 16 labels c0..c15
2) dragdrop event zet de backcolor voor label waarop gedropped is
3) het label waarop gedropped is, genereert een BackColorChanged event.
4) in de c[n].BackColorChanged event code, zet ik het textlabel op de juiste waarde.
Nu het probleem:
Als ik, voordat ik het label in de c[n].BackColorChanged event code zet, eerst wat andere zaken doe, wordt er halverwege deze procedure eruit gesprongen omdat een label uit het 256 kleurenpalet kennelijk weer een 'mousemove' event gekregen heeft.
Als de BackColorChanged() er als volgt uit ziet:
Visual Basic:
wordt het <zet Tx> statement niet meer uitgevoerd1
2
3
4
5
6
7
| Private Sub Label_BackColorChanged(ByVal sender As Object, ByVal e As System.EventArgs) for i = 0 to 255 <doe iets ingewikkelds> next <zet Tx behorende bij sender op de juiste waarde> End Sub |
Wat ik dus zoek is een manier om de applicatie te laten wachten tot alle events afgerond zijn.
Een 2e zijdelingse vraag, is het draggen in vb.net echt zo beroerd geimplementeerd dat je met een globale variable moet controleren of de gebruiker aan het draggen is?
Wat heb ik al gedaan:
Microsoft site doorgespit
Google gebruikt, gezocht op "block events", "hold events", "wait for events to finish", "cascaded events" etc
Op Got gezocht op ["Vb.net" events]
Samengevat:
event1 genereert event2, terwijl event2 code wordt uitgevoerd, komt er een nieuwe event1 binnen welke ervoor zorgt dat event2 code niet verder uitgevoerd wordt.
Hoef geen uitgebreide code, als iemand mijn neus de juiste richting op kan zetten, kom ik er verder wel uit.
If you choose to criticise you choose your enemies