RedBeard schreef op woensdag 19 april 2006 @ 08:45:
Ik heb heel even naar je code gekeken
Het probleem is dat je van alle geselecteerde objecten bij elke verplaatsing de positie opnieuw doorrekend. Als je muis dan weer een milimeter verder is begint dit proces opnieuw maar wordt eerst de andere afgerond.
Dus krijg je een vertraging en dus krijg je die staart.
Ik zou denk ik ervoor zorgen dat het mouseevent pas afgehandeld wordt als de muis even stilstaat.
of in ieder geval zorgen dat de verwerking van het oude event stopt op het moment dat het proces weer aangeroepen wordt.
Ik heb nu het volgende gedaan
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| private void Control_MouseMove(object sender, MouseEventArgs e)
{
//prevent this event from being triggered if the event is still being processed
if (moving) return;
//tell the system this event is being processed
moving = true;
[de daadwerkelijke verplaatsingscode]
//get rid of the 'movingtail'
Application.DoEvents();
//tell the system this events is finished
moving = false;
} |
En dit is tot nu de beste oplossing wat ik heb kunenn vinden, echter, dit heeft als effect dat wanneer een aantal controls snel worden gesleept en los worden gelaten, hij de laatste aktie niet uitvoert.
Is er niet een manier om ervoor te zorgen dat alle events die nog uitgevoerd moeten worden, verwijderd worden?
[
Voor 19% gewijzigd door
Verwijderd op 19-04-2006 17:43
]