C#多选列表框移动

时间:2009-12-15 19:50:51

标签: c#

我所拥有的是两个列表框。

在listbox1中,我希望用户能够单击按钮并将所有选定项目移动到列表框2。此外,如果没有选择,我不希望按钮工作。有人有什么建议吗?

listbox1.items.add(listbox2.selecteditems);只需将(集合)移到第二个列表框。

5 个答案:

答案 0 :(得分:3)

我猜您需要单独移动项目:

List<object> itemsToRemove = new List<object>();

foreach (var item in listbox2.SelectedItems)
{
    listbox1.Items.Add(item);
    itemsToRemove.Add(item);
}

foreach (var item in itemsToRemove)
{
    listbox2.Items.Remove(item);
}

这会将所有选定项目从listbox2移至listbox1itemsToRemove列表用作临时存储,因为在迭代时无法修改集合;迭代时我们只需要将要删除的项目的引用添加到临时列表中,然后我们遍历该列表并删除这些项目。

为了处理没有选择项目的情况,我会为SelectedIndexChanged事件设置一个事件处理程序,并设置按钮的Enabled属性:

theButton.Enabled = (listbox2.SelectedItems.Count > 0);

答案 1 :(得分:1)

以下是使用Linq的解决方案:

private void buttonMove_Click(object sender, EventArgs e)
{
    foreach (var item in listBox1.SelectedItems.OfType<object>().ToArray())
    {
        listBox1.Items.Remove(item);
        listBox2.Items.Add(item);
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    buttonMove.Enabled = listBox1.SelectedItems.Count > 0;
}

答案 2 :(得分:0)

for Winforms:

foreach (var i in listbox1.SelectedItems) {
     listbox2.SelectedItems.add(i);
}

要在必要时启用该按钮,请将代码添加到OnSelectionChanged事件并设置button1.enabled = (Listbox1.SelectedItems.Count > 0);

答案 3 :(得分:0)

if (listbox1.SelectedItems.Count == 0)
{
    return;
}

// Do this if you want to clear the second ListBox
listbox2.Items.Clear();

foreach (object obj in listbox1.SelectedItems)
{
    listbox2.Items.Add(obj);
}

答案 4 :(得分:0)

对于Listbox1,使用SelectedItemChanged事件并使用您提供的EventArgs来获取所选项目 - &gt;然后添加到listbox2。

如果没有选择项目button.enbabled = false;