Drag-Drop и две формы. Как я могу определить, когда произошло падение во внешнем приложении? - PullRequest
3 голосов
/ 21 мая 2009

У меня есть WinForm, где у пользователя есть возможность перетаскивать элемент из него в другое приложение. В моем случае второе приложение - SolidWorks. У меня нет проблем с работой драг-части. Пользователь может перетащить деталь из моего приложения в чертеж SolidWorks, но я хочу закрыть WinForm, когда пользователь отбросил элемент на чертеже.

Есть событие, которое я где-то пропускаю? QueryContinueDrag, похоже, не так. Я могу отбросить деталь в течение всего дня, но QueryContinueDrag не срабатывает при отбрасывании.

EDIT: Вот пример кода, который я использую для запуска операции перетаскивания. Я просто не знаю, когда происходит падение в другом приложении.

 string[] fList = new string[1];
fList[0] = @"C:\block.sldblk";
DataObject dataObj = new DataObject(DataFormats.FileDrop, fList);
DragDropEffects eff = DoDragDrop(dataObj, DragDropEffects.Link | DragDropEffects.Copy);

Ответы [ 2 ]

3 голосов
/ 21 мая 2009

Лучше всего, вероятно, использовать IDataObject в качестве данных при вызове DoDragDrop ().

Вместо непосредственного размещения нужных вам данных, создайте класс, который наследуется от IDataObject для хранения ваших данных. Когда пользователь «отбрасывает» деталь, вызывается метод «GetData» IDataObject. Вы можете использовать это, чтобы установить флажок, чтобы закрыть форму или оставить отзыв пользователя о том, что сброс произошел.

Обратите внимание, что уже реализована реализация IDataObject - DataObject. Обычно это гораздо проще расширить или использовать, чем пытаться создать свой собственный.

РЕДАКТИРОВАТЬ: я вижу, что вы уже используете DataObject - вместо того, чтобы использовать его, используйте производный класс и переопределить GetData, это будет вызвано, когда происходит сброс.

2 голосов
/ 22 мая 2009

DoDragDrop () имеет возвращаемое значение. Если он возвращает DragDropEffects.None, вы захотите сохранить свою форму живой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...