C# 的 ListView 中 多个 Items 的 批量移动方法


C# 把 DragDrop 实现的很全面。

一个 ListView,当其 AllowDrop = true 后,就会支持 DragDrop 了。

可以把外部的 东西 拖进 ListView ,也可以支持 ListView 中,Item 之间的互拖(比如用来改变Item之间的顺序)。

若要支持一批的 Items (如选中的一批)移到某个 Item 之后要怎么做呢?

诀窍就在于 ItemDrag 这个实现中。

private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
    //listView1.DoDragDrop(e.Item, DragDropEffects.Move);
    listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Move);
}

如上代码,如果是把 Item A 拖到 Item B上,就用上面注释掉的那句。如果是选中的一批,就用下面那句。

 DoDragDrop 的第一个参数,其实就会被放到 其它 DragXXXXX 实现方法的参数 DragEventArgs 的 Data 中。

对应的,需要在 其它几个 DragOver,DragDrop,DragEnter 方法实现中,对输入的数据类型做一下判断,分类处理。大至如下:

if (e.Data.GetDataPresent(DataFormats.FileDrop)) //拖动的是文件列表
{
}
else if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection)))  //拖动的是选中的 Items
{
}
else if (e.Data.GetDataPresent(typeof(ListViewItem)))  //拖动的是某个 Item 
{
}
else //拖入的是其它未知的东西
{
}