检查拖放是否正在进行中

时间:2008-12-17 07:14:46

标签: c# winforms drag-and-drop

有没有办法检查拖放是否正在进行中?有些方法或win32 api可以检查吗?我知道我可以设置AllowDrop并使用事件,但在这种情况下它不起作用。基本上我想用代码检查是否任何拖放正在进行中。

4 个答案:

答案 0 :(得分:2)

我有一个类似的问题,我自己回答(几个小时后搞砸了)见 - How do I tell if a Drag Drop has ended in Winforms?

基本上,如果你做一个earwicker建议你需要在DoDragDrop调用附近开始拖拽时设置标志。如果QueryContinueDragEventArgs指示丢弃或取消,则需要在DragDrop事件和QueryContinueDrag中取消设置标志。

答案 1 :(得分:0)

GetCapture API function可能是一个好的开始。基本上,当拖动操作开始时,源窗口“捕获”鼠标,这意味着即使鼠标离开窗口它仍将接收所有鼠标事件。

但是,应用程序也可以出于其他原因捕获鼠标,因此这不是100%可靠。您可以尝试一下,看看它对您有多好。应用程序执行自己的拖放处理时,无论如何都无法确定发生了什么。

答案 2 :(得分:0)

QueryContinueDrag事件处理程序http://msdn.microsoft.com/en-us/library/system.windows.forms.control.querycontinuedrag.aspx怎么样? 您可以将处理程序挂钩到任何控件并检查是否存在正在进行的拖放操作,然后根据需要取消它。

哎呀,对不起,我刚才看到我面前的那个人已经提到过了。我很糟糕。

答案 3 :(得分:-1)

假设它只在您自己的代码的上下文中,您可以识别代码中发生拖放的所有位置,并在操作持续时间内将全局布尔标志设置为true,然后在之后返回false它结束了。

接下来的问题是,如何在应用程序中启动拖放操作?