【问题标题】:Check if a drag&drop is in progress检查是否正在进行拖放
【发布时间】:2008-12-17 07:14:45
【问题描述】:

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

【问题讨论】:

    标签: c# winforms drag-and-drop


    【解决方案1】:

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

    基本上,如果您按照earwicker 的建议进行操作,则需要在DoDragDrop 调用附近开始拖放时设置标志。如果 QueryContinueDragEventArgs 指示删除或取消,您将需要在 DragDrop 事件和 QueryContinueDrag 中取消设置标志。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        哎呀,对不起,我刚刚看到我之前的那个人已经提到过。我坏了。

        【讨论】:

          【解决方案4】:

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

          那么下一个问题是,拖放操作是如何在您的应用程序中启动的?

          【讨论】:

          • 这绝不是首选方法。必须在各个点跟踪整个应用程序的状态将是一场维护噩梦。
          • 在一个使用拖/放的大型应用程序中,显然您会以可重用的方式实现一次拖/放,因此任何人都不需要做维护噩梦。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多