【问题标题】:Can't remove items from WinForms ListView无法从 WinForms ListView 中删除项目
【发布时间】:2016-06-10 01:58:08
【问题描述】:

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

【问题讨论】:

  • 您的表单加载代码是什么?如果您在那里绑定数据并且没有if(!Page.IsPostBack){},那么无论您做什么都会在回发时被覆盖。
  • 应该提到它是一个Winforms项目!
  • “不起作用”是什么意思?不编译,运行正常但什么都不做,抛出异常?
  • 项目保留在 ListView1 中
  • 要删除选中的项目还是选中的项目?

标签: c# listview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我相信您想删除选中的项目,因为它们已移至第二个列表视图。所以试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多