用户完成拖放后重新排列多个选定的列表视图项目

Rearranging multiple selected listview items after user finishes drag & drop

简介:

我正在研究列表视图的拖放功能。我停留在最后一步 -> 在用户完成拖放后重新排列 多个 个选定项目。

问题:

你能解释一下实现项目重排的算法吗?

我有用户释放鼠标后点击项目的索引。我有拖动项目的索引及其计数。伪代码也是可以接受的,但请注意我可能有后续问题。

注意:

此 post 已针对声称我的原始问题未寻求用户友好实施的评论进行了编辑。

关键是要实现标准的拖放行为,而我一开始问题措辞不佳的原因是我缺乏这方面的经验。

如果需要进一步说明,我会更新我的 post。

此致。

正常的拖放重新排序会删除所选项目并将它们重新插入到新位置。新地点的现有项目跳转到旧项目的来源是非常不直观的。

要实现 "standard" 重新排序,基本上你:

  • 记住用户将您的项目拖到的下方项目的索引。在上面的示例中,这将是 5(假设要在 上方 项目 6 上插入新项目)
  • 使用 LVM_DELETEITEM
  • 从列表中一次一个地删除拖动的项目
  • 如果拖动的项目最初高于新位置,从您在步骤 1 中记住的索引中减去拖动项目的总数。这将得到 2 使用上面的示例。
  • 最后,将拖动的项目重新插入到记住的索引处(记住为每个附加项目增加新索引)。例如,第一个拖动的项目将插入位置 2,然后是下一个 3,依此类推。

另请注意,您需要对项目被拖动到列表顶部的情况进行特殊处理。在这种情况下,您将从 0 开始插入,然后是 1 等等。