我有一个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);
答案 0 :(得分:3)
最好的办法是在调用DoDragDrop()时使用IDataObject作为数据。
不是直接将所需数据放在那里,而是创建一个继承自IDataObject的类来保存数据。当用户“删除”该部件时,将调用IDataObject的“GetData”方法。您可以使用此标志设置标志以关闭表单,或者向用户提供发生丢弃的反馈。
请注意,已经提供了IDataObject的实现--DataObject。扩展或使用它通常比尝试创建自己的更容易。
编辑:我看到你已经在使用DataObject了 - 而不是使用它,使用派生类并覆盖GetData,这将在发生丢弃时调用。
答案 1 :(得分:2)
DoDragDrop()具有返回值。如果它返回DragDropEffects.None,您将希望保持表单活着。