我有两个ListView,想要将项目从一个移动到另一个。
我可以复制到新列表,但从第一个列表中删除不起作用。
private void button2_Click(object sender, EventArgs e)
{
foreach (ListViewItem i in listView1.Items)
{
if (i.Checked == true)
{
ListViewItem itemClone = i.Clone() as ListViewItem;
listView2.Items.Add(itemClone);
}
}
foreach (ListViewItem itemSelected in listView1.SelectedItems)
{
listView1.Items.Remove(itemSelected);
}
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
listView2.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
目前有两个循环有点不优雅,但我读过的一个帖子说我无法在同一个foreach循环中添加和删除项目。
答案 0 :(得分:2)
你在第二个循环中使用了SelectedItems,而不是CheckedItems。
答案 1 :(得分:0)
我相信您要删除已检查的项目,因为它们已移至第二个列表视图。所以试试这个:
private void button1_Click(object sender, EventArgs e)
{
listView1.BeginUpdate();
listView2.BeginUpdate();
var checkedItems = new List<ListViewItem>();
foreach (ListViewItem li in listView1.CheckedItems)
{
checkedItems.Add(li.Clone() as ListViewItem);
listView1.Items.Remove(li);
}
listView2.Items.AddRange(checkedItems.ToArray());
listView1.EndUpdate();
listView2.EndUpdate();
}