在具有组的列表视图之间拖放

时间:2019-09-23 14:50:21

标签: listview drag-and-drop

我是意大利语,所以我为我的英语道歉。我在Win7或Win10上使用VS2008 PRO(VB.NET),Net Framework 3.5 SP1。我有以下问题:

我想在2个不同的列表视图之间拖放项目。源没有分组,目标有分组。

在表单加载时,我用组填充目标列表视图,但没有项目。为了查看这些组,我在每个组中添加了一个Text = String.Empty的“虚拟项”。这种方式向我显示了组,而不显示项目(见图)

On Form Load

我还发现组中的每个第一项的索引均为0,第二项为1,依此类推,因此索引不是唯一的。

当我将项目从源拖动到目标时,我需要确定目标组;用户可以将鼠标移到现有组之间的区域上,而不必总是在现有项目上)在另一个问题中,我找到了以下代码:

    ' Retrieve the client coordinates of the mouse pointer.
    Dim targetPoint As Point = TargetList.PointToClient(New Point(e.X, e.Y))
    ' Retrieve the index of the item closest to the mouse pointer.
    Dim targetIndex As Integer = TargetList.InsertionMark.NearestIndex(targetPoint)

在上面的代码中,我获得了最接近用户释放鼠标的索引,但我始终获得索引= 0的项目(没有有关组的信息);这样对我不好

    Dim htInfo As ListViewHitTestInfo = TargetList.HitTest(TargetList.PointToClient(New Point(e.X, e.Y)))
    Dim lviSibling As ListViewItem = htInfo.Item

以上代码仅在将鼠标释放到现有项目上时有效;如果不是这样(当Item存在但不可见时我处于这种状态),则htInfo.Item为Nothing,我无法获得相关的组。

一种可能的解决方案是显示带有文本“ [在此处放下新项目]”的虚拟项目,以迫使用户将鼠标释放到现有项目上,但是我想找到一种更好的方法(如果有)

任何建议将不胜感激。 谢谢 斯特凡诺

0 个答案:

没有答案