首页 / 知识
关于.net:DoDragDrop和MouseUp
2023-04-13 07:18:00

DoDragDrop and MouseUp是否有一种简单的方法来确保拖放失败后,框架不会吞噬MouseUp事件并忽略该事件? 我发现了一篇博客文章,描述了一种机制,但是它涉及大量的手动记账,包括状态标志,MouseMove事件,手动"鼠标离开"检查等。可以避免。 我最近想在我的项目中添加拖放功能,但我并没有遇到这个问题,但是我很感兴趣,我真的很想看看我是否可以想出一种比方法中描述的更好的方法。您链接到的页面。我希望我清楚地了解了您想做的所有事情,总的来说,我认为我以一种更加优雅和简单的方式成功地解决了这个问题。 快速说明一下,对于这样的问题,如果您提供一些代码,那将非常好,这样我们就可以准确地看到您要执行的操作。我之所以这么说是因为我在解决方案中假设了一些有关您代码的信息...所以希望它已经很接近了。 这是代码,我将在下面进行解释:
我省略了大部分设计器代码,但包括事件处理程序链接代码,因此您可以确定将什么链接到什么。在我的示例中,拖放发生在标签LabelDrag和LabelDrop之间。 我的解决方案的主要部分是使用QueryContinueDrag事件。在该控件上调用DoDragDrop后键盘或鼠标状态发生更改时,将触发此事件。您可能已经在执行此操作,但是非常重要的一点是,调用控件的DoDragDrop方法作为源,而不是与表单关联的方法。否则QueryContinueDrag将不会触发! 要注意的一件事是,当您在放置控件上释放鼠标时,QueryContinueDrag实际上会触发,因此我们需要确保允许这样做。这可以通过检查Mouse位置(使用全局Control.MousePosition属性进行检索)是否在LabelDrop控件矩形的内部来进行处理。您还必须确保将MousePosition转换为相对于以PointToClient为控件的客户端窗口的点.MousePosition返回屏幕的相对位置。 因此,通过检查鼠标不在放置控件上并且鼠标按钮现在位于上方,我们已经有效地捕获了LabelDrag控件的MouseUp事件! :)现在,您可以执行此处要执行的任何处理,但是如果您已经拥有在MouseUp事件处理程序中使用的代码,则效率不高。因此,只需从此处调用MouseUp事件,并向其传递必要的参数,MouseUp处理程序将永远不会知道它们之间的区别。 不过,请注意,在我的示例中从MouseDown事件处理程序中调用DoDragDrop时,此代码实际上永远不会触发直接的MouseUp事件。我只是将代码放在那里,以表明有可能做到这一点。 希望有帮助! |
最新内容
相关内容
Python 事件对象
Python 事件对象,通信,培训,线程,事件,对象,内部,标志,信号,机制,以上,一个线程发出事件信号,其他线程等待该信号,这是最简单的线程之间通信机关于java:为什么无状态会话bean是单
关于java:为什么无状态会话bean是单线程的?,关于java:为什么无状态会话bean是单线程的?,实例变量,业务逻辑,编码,状态,Why stateless ses关于 c#:当文件变得可访问时是否可
关于 c#:当文件变得可访问时是否可以引发事件?,关于 c#:当文件变得可访问时是否可以引发事件?,文件,对象,事件,修改,Is It Possible To关于c#:调用跨线程事件的最简单方法
关于c#:调用跨线程事件的最简单方法,关于c#:调用跨线程事件的最简单方法,事件,线程,后台,事件模型,Cleanest Way to Invoke Cross-Thre关于启动:启动后寄存器的状态
关于启动:启动后寄存器的状态,关于启动:启动后寄存器的状态,寄存器,加载,地址,内容,State of Registers After Bootup我正在x86机器上使用lambda作为事件处理程序会导致
使用lambda作为事件处理程序会导致内存泄漏吗?,使用lambda作为事件处理程序会导致内存泄漏吗?,方法,memory,leak,handlers,Can using l防止TreeView触发VB6中的事件?
防止TreeView触发VB6中的事件?,防止TreeView触发VB6中的事件?,事件,处理程序,我有一个,代码,Prevent a TreeView from firing events i关于多线程:Windows窗体线程和事件-
关于多线程:Windows窗体线程和事件-ListBox会及时更新,但是Progressbar会遇到巨大的延迟,关于多线程:Windows窗体线程和事件-ListBox关于javascript:添加多个window.onl
关于javascript:添加多个window.onload事件,关于javascript:添加多个window.onload事件,事件,用户控件,我向,添加,Add multiple window关于c#:如何使事件回调进入Win窗体
关于c#:如何使事件回调进入Win窗体线程安全?,关于c#:如何使事件回调进入Win窗体线程安全?,回调方法,控制,表单,事件,How do I make event关于c#:拖放到托管的浏览器控件
关于c#:拖放到托管的浏览器控件,关于c#:拖放到托管的浏览器控件,控件,服务器,程序,我有一个,Drag and Drop to a hosted Browser controlJVM运行状态评估及优化
JVM运行状态评估及优化,JVM,运行,状态,评,估及,优化,预估,性,优化,,预估性优化估算系统QPS,每个请求会创建多少对象,占多少内存,机器配