繁体   English   中英

C#在ListViews之间拖放

[英]C# Drag & Drop Between ListViews

我正在尝试创建一个名为DragDropListView的独立Winforms控件。 它源自ListView。

我有一些代码,允许用户通过在新位置中拖放项目来对控件中的列表项目进行排序。 我通过重写OnDragDrop,OnDragOver,OnDragEnter,OnItemDrag实现了这一点。

我遇到的问题是从一个列表视图拖动到完全不同的列表视图。 该事件将按预期在其他列表视图上触发,但是该方法未采用“发送者”参数,因此没有好的方法可以知道要从何处拖动项目,也无法找出要实际抓取的项目。项被拖动。 当前代码可用于“ this.SelectedItems”之类的东西,但我希望它是“ sender.SelectedItems”。

我猜没有发送者参数的原因是该控件不应该负责了解其环境,而宿主窗体应该处理两个控件之间的交互,但是我正在尝试构建自包含的控件,具有此功能,因此让它流到表单上是行不通的。

有想法吗?

我认为您可以通过listViewItem.ListView属性从Items知道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 [VB.Net]中祝您好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM