【发布时间】:2013-06-23 20:17:26
【问题描述】:
我有一个 C# WinForms 应用程序,其表单上有一个 GridView,它显示来自数据库的记录,其中包含存储在数据库中的 blob(文件 PDF/JPG/等)。
我可以双击网格中的一行,将 blob 写入磁盘并打开文件。 我可以单击行来选择一行或多行(使用 ctrl+shift) 我可以将文件拖到网格上以将文件作为行添加到网格(和数据库)
现在我希望用户能够将一行或多行从网格拖动到例如桌面或邮件客户端,但不知道在什么情况下开始“拖动”操作。
当用户选择一个或多个文件时,他/她使用鼠标左键执行此操作,拖动使用相同的鼠标左键,这两个事件都会触发鼠标按下事件。如何确定用户将要做什么?
我曾尝试在鼠标按下事件中启动拖动操作,但如果我想选择多行,这不起作用,每次单击一行时都会启动拖动操作...
例如,在 Windows 资源管理器中是如何处理的? 如何检测用户正在尝试做什么?
【问题讨论】:
-
在 MouseDown 中你应该记下位置,然后当你在没有 MouseUp 的情况下得到 MouseMove 时,你可以计算移动的距离。如果鼠标移动超过一定距离(比如在 X 或 Y 方向上移动 12 个像素),则开始拖动。
-
stackoverflow.com/questions/15322342/… .. 希望有所帮助
-
Matthew 是对的,但是使用 SystemInformation.DragSize 属性 (msdn.microsoft.com/en-us/library/…) 而不是 12 像素
标签: c# winforms drag-and-drop