C# Can';t从WinForms ListView中删除项
我有两个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(
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中是否要删除选定的项目或选中的项目?