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

Joh*_*n M 6 c# drag-and-drop winforms

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

UPDATE1:

我认为基本流程是:

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

UPDATE2:

基本流程(基于答案):

  • 将'ItemDrag'事件添加到列表视图中.
  • 在'ItemDrag'中添加'DoDragDrop'
  • 将'DragEnter'事件添加到图片框中.
  • 在"DragEnter"中添加"GetDataPresent"检查以检查数据类型
  • 将"DragDrop"事件添加到图片框中
  • 在"DragEnter"中添加"GetDataPresent"检查以检查数据类型

Han*_*ant 14

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

    private void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
        DoDragDrop(e.Item, DragDropEffects.Move);
    }
Run Code Online (Sandbox Code Playgroud)

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

    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...
    }
Run Code Online (Sandbox Code Playgroud)

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

    public Form1() {
        InitializeComponent();
        trashCan.AllowDrop = true;
    }
Run Code Online (Sandbox Code Playgroud)