【发布时间】:2016-11-04 20:57:31
【问题描述】:
现在,我可以将一个项目从 listView 1 拖到 listView 2。如何克隆/复制/移动项目的数据? Gif of what i mean here
widgetList 是 listView1。也就是最右边的列表。
private void fillWidgetList()
{
widgetList.Groups.Add(new ListViewGroup("System", HorizontalAlignment.Left));
var cpu = new ListViewItem { Text = "CPU", Tag = "", Group = widgetList.Groups["System"] };
var ram = new ListViewItem { Text = "RAM", Tag = "", Group = widgetList.Groups["System"] };
widgetList.Items.Add(cpu);
widgetList.Items.Add(ram);
}
widgetCollectionList 是 listView2。也就是中间的列表。
private void widgetList_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
// am i suppose to save the dragged item somewhere?
}
private void widgetCollectionList_DragEnter(object sender, DragEventArgs e)
{
//e.Effect = DragDropEffects.Copy;
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.Move;
}
}
private void widgetCollectionList_DragDrop(object sender, DragEventArgs e)
{
widgetCollectionList.Items.Add(e.Data.ToString()); // What do i replace this with?
}
private void WidgetMaker_Load(object sender, System.EventArgs e)
{
widgetCollectionList.AllowDrop = true;
widgetCollectionList.DragDrop += new DragEventHandler(widgetCollectionList_DragDrop);
}
【问题讨论】:
-
一个LVI只能属于一个LV。所以要移动,你只需添加它。要复制,您必须克隆它。由于您将 LVI 放在剪贴板上,因此您应该在 DragDrop 事件中将其投射回。考虑使用一组 LVI,以便一次可以使用多个
-
会将拖动的项目克隆到 List
复制项目 = new List ();然后在拖放事件上克隆项目?如果是这样,我将如何从 ItemDrag 事件中获取项目到列表中?它的抛出无法将对象转换为 listviewitem -
你想做什么:a) 移动,b) 复制 c) 任一个,取决于用户? e.Item 将包含您在
DoDragDrop中放置的任何内容 -
移动将是理想的
标签: c# .net winforms listview listviewitem