C# – 将列表视图中的项目拖到垃圾桶中?

如何将项目从Winforms-listview控件拖到另一个控件(垃圾桶图片)?

UPDATE1:

我认为基本流程是:

  • 对于listview上的ItemDrag事件,有一个DoDragDrop
  • 然后在图片框上有一个捕获该拖动的DragEnter事件?

UPDATE2:

基本流程(基于答案):

  • 将’ItemDrag’事件添加到列表视图中。
  • 在’ItemDrag’中添加’DoDragDrop’
  • 将’DragEnter’事件添加到图片框中。
  • 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型
  • 将“DragDrop”事件添加到图片框中
  • 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型

为列表视图的ItemDrag事件实现事件处理程序:

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

并为垃圾桶编写事件处理程序:

  private void trashCan_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ListViewItem))) { e.Effect = DragDropEffects.Move; } // others... } private void trashCan_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ListViewItem))) { var item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; item.ListView.Items.Remove(item); } // others... } 

您必须强制PictureBox的AllowDrop属性,它在“属性”窗口中不可用:

  public Form1() { InitializeComponent(); trashCan.AllowDrop = true; } 

查看DragEnterDragLeaveDragDrop 。 另请参阅示例, 在ListView控件中实现拖放操作

编辑仅当您需要shell集成拖放时才适用。 如果您没有与shell集成,并且只在您自己的应用程序中的东西之间拖放,则此答案不适用。 我为这种困惑道歉。


您需要在应用或控件中支持拖放function。 这涉及一些COM互操作。

一开始看起来有点复杂,但是一旦你掌握了基本的骨架,它就不那么难实现了。 此外还有一个很好的指南,告诉你如何:

http://blogs.msdn.com/adamroot/pages/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx