将项目从一个列表框移动到另一个列表框(c#webforms)

时间:2012-07-02 20:30:04

标签: c# listbox

我遇到一个奇怪的问题,我可以将项目从一个列表框移动到另一个列表框,但不能将任何项目移回原始列表框。这是我的代码:

private void MoveListBoxItems(ListBox from, ListBox to)
{
    for(int i = 0; i < first_listbox.Items.Count; i++)
    {
        if (first_listbox.Items[i].Selected)
        {
            to.Items.Add(from.SelectedItem);
            from.Items.Remove(from.SelectedItem);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

protected void Button2_Click(object sender, EventArgs e)
{
    MoveListBoxItems(first_listbox, second_listbox);
}

protected void Button1_Click(object sender, EventArgs e)
{
    MoveListBoxItems(second_listbox, first_listbox); 
}

button2事件正常,但button1事件没有。列表框不是数据绑定的,我手动添加了项目。

也许有一些非常明显的我在这里失踪了?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

将其更改为:

private void MoveListBoxItems(ListBox from, ListBox to)
{
    for(int i = 0; i < from.Items.Count; i++)
    {
        if (from.Items[i].Selected)
        {
            to.Items.Add(from.SelectedItem);
            from.Items.Remove(from.SelectedItem);

            // should probably be this:
            to.Items.Add(from.Items[i]);
            from.Items.Remove(from.Items[i]);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

您的原始方法在这两个地方使用first_listbox,而不是from。另外,如果选择了多个项目,我想你的代码不起作用。

答案 1 :(得分:1)

更改for循环以迭代本地参数from,而不是first_listbox

private void MoveListControlItems(ListControl from, ListControl to)
{
    for(int i = 0; i < from.Items.Count; i++)
    {
        if (from.Items[i].Selected)
        {
            to.Items.Add(from.Items[i]);
            from.Items.Remove(from.Items[i]);
        }   
    }
    from.SelectedIndex = -1;
    to.SelectedIndex = -1;
}

如果您想一次移动多个项目,还需要切换添加和删除。

只是另一种想法,尽管主要是个人偏好,如果将参数类型切换为ListControl,您也可以对ComboBox使用相同的方法。