[英]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.