1

从列表和树视图拖动有一个很好的属性,即在您将鼠标移动到最小距离之前它不会开始拖动 - 拖动阈值。拖动阈值由 .NET Windows 窗体中通过 SystemInformation.DragSize 提供的 SM_CXDRAG 和 SM_CYDRAG 系统指标控制。

如果我想实现一个尊重拖动阈值的自定义拖动,那么最好的方法是什么?MSDN 上的文档似乎完全避免了这个问题,只是告诉您在 MouseDown 上立即调用 DoDragDrop。

是否有一些我错过的事件可用于检测鼠标何时被拖动的距离超过拖动阈值?我真的应该为这种常见的事情自己实施吗?

4

2 回答 2

1

好吧,TreeView 和 ListView 都有 ItemDrag 事件来告诉你。但这不是 Control 类的标准事件,这些事件是特定于类的,由底层本机 Windows 控件生成的专用通知触发。分别为 TVN_BEGINDRAG 和 LVN_BEGINDRAG。其他一些常用控件有它,标题、工具栏和钢筋。消息和控件都不是“标准的”,它们是后来添加到 Windows 中的,大约在 Windows 95 时间范围内。微软没有将他们的功能添加到旧控件中。

所以这就是降压停止的地方。您需要在任何其他 Control 类上实现自己的。使用 MouseDown 和 MouseMove 事件并不难。

于 2012-08-08T13:21:35.900 回答
-1

实现阻力阈值相当容易。在鼠标按下时,保存光标的位置并调用 DoDragDrop,然后在拖动事件中,检查鼠标当前位置与保存位置之间的距离,如果距离大于阈值,则仅移动元素。

于 2012-08-08T12:46:47.383 回答