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 //拖入的是其它未知的东西 { }