2009-02-02 3 views
4

Мне кажется, что невозможно определить, была ли операция перетаскивания успешной или нет, но должен быть какой-то способ. Предположим, что я хочу выполнить «переход» от источника к месту назначения. Если пользователь освобождает мышь над некоторым приложением или элементом управления, который не может принять падение, как я могу сказать?Как узнать, не удалось ли выполнить операцию перетаскивания?

В этом отношении, как я могу узнать, когда перетаскивание завершено вообще?

Я видел this question, но его решение не работает для меня, и e.Action является всегдаContinue.

ответ

6

Я не уверен, что это может вам помочь, но метод DoDragDrop возвращает окончательное значение DragDropEffects.

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

А, думаю, у меня это есть. Выключает вызов DoDragDrop на самом деле синхронный (как ламе) и возвращает значение DragDropEffects, которое установлено в None, если op не удался. Таким образом, в основном это означает, что приложение (или, по крайней мере, поток пользовательского интерфейса) будет заморожено до тех пор, пока пользователь находится в середине перетаскивания. Это не очень элегантное решение для меня.

Ok cz_dl Я вижу, что вы только что опубликовали это, поэтому я дам вам ответ.

Это я не понимаю: как может пункт назначения определить, должен ли op быть перемещением или копией? Разве это не должно быть в исходном приложении?

0

Не могу добавить комментарий, так что еще один ответ. Я также был удивлен, увидев в первый раз, что DoDragDrop называется синхронно, и это как-то не застывает в пользовательском интерфейсе.

Но копия/перемещение вещей, которые я считаю совершенно логичными. Вы можете указать разрешенные эффекты при вызове метода DoDragDrop в исходном приложении, и это все, что важно для вас. Как приложение-получатель будет обрабатывать и использовать данные, которые ему нужны.

 Смежные вопросы

  • Нет связанных вопросов^_^