C# Can';t从WinForms ListView中删除项

C# Can';t从WinForms ListView中删除项,c#,listview,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(

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

你在第二个循环中使用了SelectedItems,而不是CheckedItems。

你使用了SelectedItems,而不是CheckedItems,在第二个循环中。

我认为您希望删除选中的项目,因为它们已移动到第二个列表视图。所以试试这个:

        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();
        }
private void按钮1\u单击(对象发送者,事件参数e)
{
listView1.BeginUpdate();
listView2.BeginUpdate();
var checkedItems=新列表();
foreach(listView1.CheckedItems中的ListViewItem li)
{
checkedItems.Add(li.Clone()作为ListViewItem);
listView1.Items.Remove(li);
}
listView2.Items.AddRange(checkedItems.ToArray());
listView1.EndUpdate();
listView2.EndUpdate();
}

我认为您希望删除选中的项目,因为它们已移动到第二个列表视图。所以试试这个:

        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();
        }
private void按钮1\u单击(对象发送者,事件参数e)
{
listView1.BeginUpdate();
listView2.BeginUpdate();
var checkedItems=新列表();
foreach(listView1.CheckedItems中的ListViewItem li)
{
checkedItems.Add(li.Clone()作为ListViewItem);
listView1.Items.Remove(li);
}
listView2.Items.AddRange(checkedItems.ToArray());
listView1.EndUpdate();
listView2.EndUpdate();
}

您的表单加载代码是什么?如果您在那里绑定数据并且没有
If(!Page.IsPostBack){}
,那么无论您做什么,都将在回发时被覆盖。应该提到这是一个Winforms项目!你说“不行”是什么意思?不编译、运行正常但不执行任何操作、引发异常?项目保留在ListView1中是否要删除选定的项目或选中的项目?表单加载代码是什么?如果您在那里绑定数据并且没有
If(!Page.IsPostBack){}
,那么无论您做什么,都将在回发时被覆盖。应该提到这是一个Winforms项目!你说“不行”是什么意思?不编译、运行正常但不执行任何操作、引发异常?项目保留在ListView1中是否要删除选定的项目或选中的项目?