Hallo Leute,
habe ein weiteres Problem mit den Drag-Events... Und zwar habe ich mich gestern mit folgen Sachverhalt auseinander gesetzt:
Ich möchte, wenn der Anwender bei meinem Label das DragEnter-Event triggert, dass nach 500ms die Klick-Routine aufgerufen wird. Verlässt der Anwender allerdings innerhalb der 500ms wieder das Label - es wird daher DragLeave getriggert, soll die Klick-Routine nicht ausgeführt werden.
Parziel funktioniert dies auch. Allerdings kann ich die Routine nur einmal abbrechen - danach ist der ganze Sachverhalt blockiert.
Soll heißen, ich fahre mit der Maus drüber und verlasse das Feld innerhalb der 500ms, so kann ich danach nicht mehr das Drag&Drop beenden.
Dies ist mein Code:
C#-Code: |
object _dragIn ;
private void Evt_DragEnter(object sender, DragEventArgs evt){
_dragIn = sender;
Helper_AsyncDragEnter(sender, evt);
}
private async void Helper_AsyncDragEnter(object sender, DragEventArgs evt){
await Task.Delay(500);
if(_dragIn.Equals(sender) && _dragIn != null){
Evt_ClickFocus(sender, (EventArgs)evt);
}
}
private void Evt_DragLeave(object sender, EventArgs ect){
_dragIn = null;
}
|
Im Grund gehts mir hier um die Machbarkeit. Daher, ist dies Prinzipiel machbar, oder ist mein Gedanke hier mehr oder minder mit gewalt mittels des Kopfes durch die Wand zu kommen?
Eine alternatove Möglichkeit die mir einfallen würde, wäre eventuell über das Move-Event... Aber ob dies sinnvoller oder Performanter ist, kann ich nicht beurteilen. Im Grunde würde ich bei dem Move-Event (bzw. in dem Fall das DragEnter-Event) dann mir einen Timestamp setzen und in der Move-Routine die Differenz abfragen...
Aber vielleicht kann mir ja jemand sagen, welche der beiden alternativen sinnvoller wäre - und wenn es die erste Variante ist, was ich dafür brauche.
Liebe Grüße Frokuss