我有一个带有多选和 ExtendedSelect 的 TListBox 都设置为 true。我需要能够拖动列表框中的多个项目来重新排列它们。我的问题是当用户单击已选择的项目而不按住 CTRL 或 SHIFT 键时会发生什么。
案例一:DragMode 设置为 dmManual 在鼠标按下之前清除选择。这将不允许拖动多个项目。
情况 2:DragMode 设置为 dmAutomatic MouseDown 事件从不触发。选择未清除,因此可以拖动,但用户无法通过单击所选项目之一来清除选择。如果选择了所有项目或者用户想要选择的下一个项目是当前选择的一部分,这确实会导致问题。
请注意,仅当您在 OnStartDrag 过程中为 DragObject 分配某些内容时,才会出现此问题。我认为如果 OnStartDrag 仅在用户移动鼠标后启动,问题就会消失。我设置了 Mouse.DragImmediate := false ,但是只要单击列表框中的某个项目,我仍然会触发 StartDrag。
我在这个项目中使用了 Delphi 7,但我在 Delphi 2007 中看到了相同的行为。