2009-02-02 6 views
4

Il me semble qu'il n'y a aucun moyen de détecter si une opération de glissement a réussi ou non, mais il doit y avoir un moyen. Supposons que je veux effectuer un "mouvement" de la source à la destination. Si l'utilisateur relâche la souris sur une application ou un contrôle qui ne peut pas accepter la baisse, comment puis-je le dire?Comment puis-je savoir si une opération de glisser-déposer a échoué?

D'ailleurs, comment puis-je savoir quand la traînée est terminée?

je vis this question, mais sa solution ne fonctionne pas pour moi, et e.Action est toujoursContinue.

Répondre

6

Je ne sais pas si cela peut vous aider, mais la méthode DoDragDrop renvoie la valeur finale DragDropEffects.

var ret = DoDragDrop(...); 
if(ret == DragDropEffects.None) //not successfull 
else // etc. 
3

Ah, je pense que je l'ai. Il s'avère que l'appel à DoDragDrop est en réalité synchrone (comment boiteux), et renvoie une valeur de DragDropEffects, qui est définie sur None si l'opération échoue. Donc, fondamentalement, cela signifie que l'application (ou au moins le thread de l'interface utilisateur) sera gelé tant que l'utilisateur est au milieu d'un glisser. Cela ne me semble pas une solution très élégante.

Ok cz_dl Je vois que vous venez de poster cette chose, donc je vais vous donner la réponse.

Cela je ne comprends pas bien: comment la destination peut-elle déterminer si l'op devrait être un mouvement ou une copie? Cela ne devrait-il pas être à la hauteur de l'application source?

0

Impossible d'ajouter un commentaire, donc une autre réponse. J'ai également été surpris quand j'ai vu pour la première fois que DoDragDrop est appelé de manière synchrone et qu'il ne gèle pas l'interface utilisateur.

Mais les choses de copier/déplacer je crois est parfaitement logique. Vous pouvez spécifier les effets autorisés lors de l'appel de la méthode DoDragDrop dans l'application source et c'est tout ce qui est important pour vous. Comment l'application de destination va gérer et utiliser les données à sa disposition.