将一个值从列表移动到另一个列表,从列表中删除下一个值

本文关键字:列表 另一个 删除 下一个 移动 一个 | 更新日期: 2023-09-27 18:16:09

我有两个列表框,当我交换值到另一个列表框时,它总是从列表中删除下一个值,当我尝试从列表中交换最后一个值时,它从列表中获取顶部一个值。我试图找出问题所在,但一无所获。下面是要审查的代码部分。

private void MoveListBoxItems(ListBox lstEmployeelist, ListBox lstSelectedEmployees)
{
    ListBox.SelectedObjectCollection sourceItems = lstEmployeelist.SelectedItems;
    List<Master> newsource = this.masterBindingSource.DataSource as List<Master>;
    List<Master> _selectedSource = this.masterSellectedBindingSource.DataSource as List<Master>;
    try
    {
        if (lstEmployeelist.Items.Count > 0)
        {
            for (int i = 0; i <= sourceItems.Count -1 ; i++)
            {
                Master item = sourceItems[i] as Master;
                this.masterSellectedBindingSource.AddNew();
                Master sitems = masterSellectedBindingSource.Current as Master;
                sitems.Empno = item.Empno;
                sitems.FirstName = item.FirstName;
                newsource.Remove((Master)item);
            }
            if (sourceItems.Count > 0)
                this.masterBindingSource.RemoveCurrent();
            this.masterSellectedBindingSource.EndEdit();
            lstSelectedEmployees.DataSource = masterSellectedBindingSource;
            lstSelectedEmployees.DisplayMember = "FirstName";
            lstSelectedEmployees.ValueMember = "Empno";
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

将一个值从列表移动到另一个列表,从列表中删除下一个值

我认为问题出在你迭代sourceItems的方式上。

因为你正在使用for循环(大概是因为你不能用foreach来做,因为你不能修改集合),当你从集合中删除项目1并将其添加到第二个列表时,项目2和所有项目上移1。

所以物品2变成新的物品1,物品3变成物品2,等等,等等……

要解决这个问题,当你决定移动一个项目时,你还需要将i减少1 (i——;),以便当for循环再次循环时,i增加,它会回到相同的索引。


如果你要移动所有项目,而不仅仅是选择项目,那么你不应该使用for循环,而应该使用while循环,像这样:

while (sourceItems.Count > 0)
{
    // code here
}