Wie kann ich feststellen, ob ein Drag-Drop in Winforms beendet wurde?

8

Wie kann ich sagen, dass ein Drag-Drop WinForms .net beendet hat? Ich muss einen Teil meines Formulars davon abhalten, die Datenansicht zu aktualisieren, wenn ein Drag-Drop ausgeführt wird.

Ich habe versucht, eine Flagge zu benutzen, aber ich scheine nicht alle Ereignisse zu erfassen, die ich brauche, um die Flagge synchron mit dem Fortschritt des Drag-Drop zu halten. Insbesondere kann ich nicht sagen, wann die Drag-Drop-Operation endet, ohne dass ein Drag-Drop abgeschlossen wird, d. H. Wenn der Benutzer das Element auf einem Steuerelement mit allow drop = false löscht oder wenn der Benutzer die ESC-Taste drückt.

Ich habe diese Frage gesehen: -

Überprüfen Sie, ob ein Drag & amp; Drop läuft

Aber es geht mein Problem nicht befriedigend an (wenn mir jemand die Antwort auf diese Frage gibt, beantworte ich diese mit der Antwort zusammen mit dem, was ich bereits habe).

    
Christopher Edwards 26.01.2009, 15:27
quelle

1 Antwort

16

Ich habe keine Abnehmer und habe das schließlich herausgefunden.

Die Antwort besteht darin, das QueryContinueDrag-Ereignis zu überwachen. Dieses Ereignis wird während der Drag-Drop-Operation kontinuierlich ausgelöst. Die QueryContinueDragEventArgs enthalten eine Action-Eigenschaft des Typs enum DragAction, bei der es sich entweder um DragAction.Cancel, DragAction.Drop oder DragAction.Continue handelt. Es ist eine Lese- / Schreibeigenschaft, mit der Sie das Standardverhalten ändern können (wir brauchen das nicht).

In diesem Beispielcode wird davon ausgegangen, dass das DragDropInProgress-Flag am Anfang eines Drag-Drop gesetzt und zurückgesetzt wird, wenn ein Drag-Drop erfolgreich abgeschlossen wurde. Er fängt eine DragDrop-Endung ab, weil der Benutzer die Maus losgelassen hat, ohne über einem Drag-Drop-Ziel zu liegen (die Drag-Drop-Ziele sind MyControl1 und MyControl2) oder bricht den Drag-Drop ab. Wenn es Ihnen egal ist, ob das DragDropInProgressFlag zurückgesetzt wird, bevor Ihre DragDrop-Ereignisse ausgelöst werden, können Sie auf den Hit-Test verzichten und einfach das Flag zurücksetzen.

%Vor%

In diesem Beispiel ist HitTest eine Routine, die eine Mausposition (Bildschirmkoordinate) und ein Array von Steuerelementen übernimmt und durch das Array geht, wobei True übergeben wird, wenn sich die Mausposition in einem der Steuerrechtecke befindet.

    
Christopher Edwards 26.01.2009, 19:21
quelle

Tags und Links