c# - 拖放和两种形式。如何检测外部应用程序何时发生掉落

标签 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);

最佳答案

最好的选择可能是在调用 DoDragDrop() 时使用 IDataObject 作为数据。

不是直接将您想要的数据放在那里,而是创建一个继承自 IDataObject 的类来保存您的数据。当用户“放下”部件时,将调用 IDataObject 的“GetData”方法。您可以使用它来设置一个标志以关闭您的表单或向用户反馈已发生掉落。

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

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

关于c# - 拖放和两种形式。如何检测外部应用程序何时发生掉落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/894582/

相关文章:

c# - 在大量相对较小的文本文档上进行全文搜索的好数据库是什么? (C# 后端)

c# - 不能为自定义事件重载委托(delegate)?

c# - 如何为 Windows C# 应用程序使用系统字体设置

c# - 拖放界面

javascript - 启用/禁用可排序取决于元素组

c# - Html.BeginForm 发布模型为空

c# - 在转发器中定义变量?

c# - 尝试为c#实现gRPC单元测试

c# - CheckedListBox 中行的替代背景颜色?

html - dragover 上的浏览​​器响应 - html5 拖放