2

我正在开发一种应用程序,该应用程序需要我有一个列表框来保存数据。

从列表框中删除对象时,我遇到了一个小问题。当我用两个单独列表中的项目填充列表框时,问题就出现了。

通常要删除对象,我会获取它的索引,然后将其从单独类中的列表中删除,然后重新加载列表框以反映更改,但在某些情况下,我需要用来自两个不同列表的对象填充列表框和确定要从两个列表之一中删除的对象的来源,我不完全确定如何执行此操作。

此代码正在填充列表框控件。//清除列表框中的所有项目 ViewListBox.Items.Clear();

        //create the lists
        List listOfPickups = visits.listPickups();
        List listOfdeliveries = visits.listDeliveries();
        //populate
        ViewListBox.Items.AddRange(listOfPickups.ToArray());
        ViewListBox.Items.AddRange(listOfdeliveries.ToArray());

当我只从一个列表中加载列表框时,这就是我删除的方式。

        if (ViewListBox.SelectedIndex < 0)
        {
            EditSelectBtn.Enabled = false;
            DeleteSelectBtn.Enabled = false;
        }
        else
        {
            if (MessageBox.Show("are you sure you want to delete the selected item?", "Are You Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                visits.removePickup(this.ViewListBox.SelectedIndex);
                //refresh listbox.
                updateList("pickups");
            }
            else
            {
                //clicked no so do nothing!
                ViewListBox.ClearSelected();
            }
        }

任何帮助将不胜感激。

4

1 回答 1

2

您可以定义所选项目的类型,并以简单的条件将其从列表中删除。此外,按索引删除也对您没有帮助。而是传递整个对象

object item = ViewListBox.SelectedItem;

if (item is Pickup)
    visits.removePickup(item);
else
    visits.removeDelivery(item);

如果项目具有相同的类型,则使用其他方式获取项目类型(例如某些属性的值)。

更新SelectedIndex一个问题 - 您可以通过与长度进行比较来确定物品来源listOfPickups,因为您首先添加了拾取物品。如果索引大于取货计数,则您正在删除交货。从选定的索引中减去取件计数,以获得您需要删除的交付项目的索引。

List<Pickup> listOfPickups = visits.listPickups();
List<Delivery> listOfdeliveries = visits.listDeliveries();
ViewListBox.Items.AddRange(listOfPickups.ToArray());
ViewListBox.Items.AddRange(listOfdeliveries.ToArray());
//...

if (ViewListBox.SelectedIndex < listOfPickups.Count)
{
   // this is a Pickup
   visits.removePickup(ViewListBox.SelectedIndex);
}
else
{
   // this is a delivery
   int deliveryIndex = ViewListBox.SelectedIndex - listOfPickups.Count;
   visits.removeDelivery(deliveryIndex);
}
于 2012-12-01T23:05:02.337 回答