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