从列表框/列表中删除多个选定对象

时间:2013-01-16 03:07:48

标签: c#

这是我第一次使用这个网站,所以希望我能正确地提出我的问题。

我正在尝试创建一个具有RentalCar对象的BindingList的程序。现在我试图允许自己一次删除多辆汽车。

这是我目前用于删除按钮的代码。

        private void buttonRemoveRental_Click(object sender, EventArgs e)

        {
        try

        {

            //List<RentalCar> tempList = new List<RentalCar>(); (This was here for another solution i am trying)

            int index = listBoxRental.SelectedIndex;
            for (int i = rentalList_.Count - 1; i >= 0; i--)
            {
                if (listBoxRental.SelectedIndices.Contains(i))
                {
                    rentalList_.RemoveAt(i);
                }

            }
        }
        catch(Exception)
        {
            MessageBox.Show("Please select a vehicle to remove from the list");
        }

但有时一个项目将留在列表框中,我无法删除。每次尝试删除最后一项时,都会删除列表中的每一项。

我正在尝试的另一个解决方案是创建另一个列表,它将存储我的rentalList_中选定的车辆然后循环并从rentalList_删除tempList中的项目但是我不知道如何去做因为我我正在存储物品。

2 个答案:

答案 0 :(得分:1)

当您从同一个List中循环并删除项目时,您将删除错误索引处的错误项目,因为删除项目后将重置索引。

试试这个

List<RentalCar> tempList = new List<RentalCar>();
for (int i = 0; i <=rentalList.Count - 1; i++)
{
    if (!listBoxRental.SelectedIndices.Contains(i))
    {
       tempList.Add(rentalList[i]);
    }
}

然后,您可以将tempList绑定到ListBox

答案 1 :(得分:1)

试试这个解决方案。它对我很好。

 private void buttonRemoveRental_Click(object sender, EventArgs e)
    {
       var selectedItems= listBoxRental.SelectedItems.Cast<String>().ToList();
       foreach (var item in selectedItems)
            listBoxRental.Items.Remove(item);
    }