将项目从一个列表框移动到另一个列表框

3

我想把一个列表视图中的项目移动到另一个列表视图中。将它们添加到第二个列表视图中可以实现,但移动后的条目并没有被删除。

private void MoveSelItems(ListBox from, ListBox to)
    {
        for (int i = 0; i < from.SelectedItems.Count; i++)
        {
            to.Items.Add(from.SelectedItems[i].ToString());
        }

        from.Items.Remove(to.SelectedItem);
    }

我正在使用C# / Winforms / .NET 3.5


这是因为“to”列表框不会自动选择您添加到其中的项目,因此“from.Items.Remove(to.SelectedItem)”什么也不做,因为“to.SelectedItem”不是刚刚添加的任何项目。 - sindre j
4个回答

3
在循环结束时,请尝试使用以下代码。
foreach ( var item in new ArrayList(from.SelectedItems) ) {
  from.Items.Remove(item);
}

2
private void MoveSelItems(ListBox from, ListBox to)
{
    while (from.SelectedItems.Count > 0)
    {
        to.Items.Add(from.SelectedItem[0]);
        from.Items.Remove(from.SelectedItem[0]);
    }
}

1
              for (int i = 0; i < ListBox3.Items.Count; i++)
               {
                    ListBox4.Items.Add(ListBox3.Items[i].Text);
                    ListBox3.Items.Remove(ListBox3.SelectedItem);

                }

1
private void MoveSelItems(ListBox from, ListBox to)
    {
        for (int i = 0; i < from.SelectedItems.Count; i++)
        {
            to.Items.Add(from.SelectedItems[i].ToString());
            from.Items.Remove(from.SelectedItems[i]);
        }
    }

虽然

如果速度很重要,Items.RemoveAt(i) 可能更快。

您可能需要创建一个临时列表。

    //declare
    List<Object> items = new List<Object>();
    for (int i = 0; i < from.SelectedItems.Count; i++)
    {
        items.Add(from.SelectedItems[i]);
    }
    for (int i = 0; i < items.Count; i++)
    {
        to.Items.Add(items[i].ToString());
        from.Items.Remove(items[i]);
    }

我不相信那会起作用,因为你在迭代时会改变集合,这样会错过一些项目。 - JaredPar
好问题。编辑“Items”会更改“SelectedItems”吗?可能是的。如果是这样,他需要将它们读入临时数组中。修改以表示这一点。 - Russell Steen
那就是我想的,因为数组变得更小了,所以我会得到一个索引错误。 - Kai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接