无法从WinForms ListView中删除项目

时间:2016-06-09 17:22:22

标签: c# listview

我有两个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循环中添加和删除项目。

2 个答案:

答案 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();
        }