将多个选定项从Listbox1移动到ListBox2

时间:2013-01-31 07:30:52

标签: c# listbox

我试图将项目从一个列表框移动到另一个列表框,如果它们是多个但我只能移动少数,意味着小于计数。我也无法为每个和for循环实现via。

if (AdvLst.SelectedIndex > -1)
        {
            for (int i = 0; i <= AdvLst.Items.Count - 1; i++)
            {
                if (AdvLst.Items[i].Selected)
                {
                    string _value = AdvLst.SelectedItem.Value;
                    string _text = AdvLst.SelectedItem.Text;
                    ListItem item = new ListItem();
                    item.Text = _text;
                    item.Value = _value;
                    SelectedMortLst.Items.Add(AdvLst.Items[i]);
                    AdvLst.Items.Remove(AdvLst.Items[i]);
                }
            }

} 并通过foreach循环:

                foreach (ListItem li in AdvLst.Items)
            {
                if (li.Selected == true)
                {
                    SelectedMortLst.Items.Add(AdvLst.SelectedItem);
                    AdvLst.Items.Remove(AdvLst.SelectedItem);
                }

            }

2 个答案:

答案 0 :(得分:2)

解决方案1 ​​

var selectedItems = AdvLst.Items.Cast<ListItem>().Where(m => m.Selected).ToArray();
SelectedMortLst.Items.AddRange(selectedItems);

//there's no removeRange, so...
foreach(var item in selectedItems)
    AdvLst.Items.Remove(item);

解决方案2 (几乎相同)

var selectedItems = AdvLst.Items.Cast<ListItem>().Where(m => m.Selected).ToArray();
foreach(var item in selectedItems) {
   SelectedMortLst.Add(item);
   AdvLst.Items.Remove(item);
}

解决方案3,修正了循环代码

for (int i = 0; i <= AdvLst.Items.Count - 1; i++)
    {
       if (AdvLst.Items[i].Selected)
           {
              string _value = AdvLst.SelectedItem.Value;
              string _text = AdvLst.SelectedItem.Text;
              ListItem item = new ListItem();
              item.Text = _text;
              item.Value = _value;
              SelectedMortLst.Items.Add(AdvLst.Items[i]);
              AdvLst.Items.Remove(AdvLst.Items[i]);
              i--;
            }
      }

导致如果您删除for循环中的项目,集合的计数发生更改,并且当您删除项目时位于i+1处的项目现在具有索引i。使用i--,您的for循环适应该更改

答案 1 :(得分:0)

一次执行一项操作,先删除或添加。 您可以先将项目添加到目的地列表,然后从源中删除<​​/ p>

List<ListItem> itemsToDelete=new List<ListItem>();
 foreach (ListItem li in AdvLst.Items)
            {
                if (li.Selected == true)
                {
                    SelectedMortLst.Items.Add(AdvLst.SelectedItem);
                    itemsToDelete.Add(AdvLst.SelectedItem);
//                    AdvLst.Items.Remove(AdvLst.SelectedItem);
                }

            }

foreach(ListItem item in itemsToDelete)
{
AdvLst.Items.Remove(item);
}