拖放和两种形式。如何在外部应用程序中检测到丢弃的时间

时间:2009-05-21 19:11:46

标签: c# winforms drag-and-drop

我有一个WinForm,用户可以将项目从中拖到另一个应用程序。就我而言,第二个应用程序是SolidWorks。我没有问题让拖动部件正常工作。用户可以将零件从我的应用程序拖动到SolidWorks工程图,但是当用户将图形放在图形中时,我想关闭我的WinForm。

有什么事我在某个地方遗失了吗? QueryContinueDrag似乎不是它。我可以整天丢弃该部分,但是QueryContinueDrag不会触发掉落。

编辑: 这是我用来开始拖动操作的代码示例。我只是不知道其他应用程序何时发生丢弃。

 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 个答案:

答案 0 :(得分:3)

最好的办法是在调用DoDragDrop()时使用IDataObject作为数据。

不是直接将所需数据放在那里,而是创建一个继承自IDataObject的类来保存数据。当用户“删除”该部件时,将调用IDataObject的“GetData”方法。您可以使用此标志设置标志以关闭表单,或者向用户提供发生丢弃的反馈。

请注意,已经提供了IDataObject的实现--DataObject。扩展或使用它通常比尝试创建自己的更容易。

编辑:我看到你已经在使用DataObject了 - 而不是使用它,使用派生类并覆盖GetData,这将在发生丢弃时调用。

答案 1 :(得分:2)

DoDragDrop()具有返回值。如果它返回DragDropEffects.None,您将希望保持表单活着。