代码之家  ›  专栏  ›  技术社区  ›  Pete Michaud

在列表视图之间拖放

  •  1
  • Pete Michaud  · 技术社区  · 15 年前

    我的代码允许用户通过在新位置拖放列表项来对控件中的列表项进行排序。我通过覆盖OnDragDrop、OnDragOver、OnDragEnter和OnEmDrag实现了这一点。

    我遇到的问题是从一个listview拖动到完全不同的listview。该事件按预期在另一个列表视图上触发,但该方法不接受“sender”参数,因此无法确定从何处拖动项,也无法确定如何实际获取被拖动的项。当前代码可以处理“this.SelectedItems”之类的内容,但我希望它是“sender.SelectedItems”。

    我想没有sender参数的原因是控件不应该负责了解它的环境,宿主窗体应该处理两个控件之间的交互,但是我试图构建具有此功能的自包含控件,所以让它渗透到窗体上是行不通的。

    思想?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Homam    15 年前

    我想你可以知道 ListView listViewItem.ListView 属性,检查它。

    我没有测试代码:

    private void listView1_DragEnter(object sender, DragEventArgs e)
    {
        if (!e.Data.GetDataPresent(typeof(ListView.ListViewItemCollection)))
        {
            e.Effect = DragDropEffects.None;
            return;
        }
    
        var items = (ListView.ListViewItemCollection)e.Data.GetData(typeof(ListView.ListViewItemCollection));
    
        if (items.Count > 0 && items[0].ListView != listView1)
        {
            e.Effect = DragDropEffects.None;
            return;
        }
    }
    

    支票 DragEventArgs ,此示例位于 CodeProject 祝你好运!