有没有办法检查拖放是否正在进行?一些可以检查的方法或win32 api?我知道我可以设置 AllowDrop 并使用事件,但在这种情况下它不起作用。基本上我想用代码检查是否正在进行任何拖放。
4 回答
我有一个类似的问题,我自己回答了(经过几个小时搞砸了)请参阅 -我如何判断拖放是否已在 Winforms 中结束?.
基本上,如果您按照earwicker 的建议进行操作,则需要在 DoDragDrop 调用附近开始拖放时设置标志。如果 QueryContinueDragEventArgs 指示删除或取消,您将需要在 DragDrop 事件和 QueryContinueDrag 中取消设置标志。
QueryContinueDrag 事件处理程序http://msdn.microsoft.com/en-us/library/system.windows.forms.control.querycontinuedrag.aspx怎么样?您可以将处理程序挂钩到任何控件并检查是否有正在进行的拖放操作,然后如果需要取消它。
哎呀,对不起,我刚刚看到我之前的那个人已经提到了这一点。我坏。
GetCapture API 函数可能是一个好的开始。基本上,当拖动操作开始时,源窗口“捕获”鼠标,这意味着即使鼠标离开窗口,它仍然会接收所有鼠标事件。
但是,应用程序也可以出于其他原因捕获鼠标,因此这不是 100% 可靠的。您可以尝试一下,看看它对您的效果如何。由于应用程序自己进行拖放处理,因此无法确定到底发生了什么。
假设它只是在您自己的代码的上下文中,您可以识别代码中发生拖放的所有位置,并在操作期间将全局布尔标志设置为 true,然后在完成后返回 false。
那么下一个问题是,如何在您的应用程序中启动拖放操作?