确定列表框项目的来源

时间:2012-12-01 22:59:32

标签: c# winforms list object .net-4.0

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

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

通常删除对象我会得到它的索引,然后在单独的类中从列表中删除它然后重新加载列表框以反映更改但在某些情况下我需要用两个对象填充列表框不同的列表和确定要从两个列表中的一个删除的对象的来源,我不完全确定如何做到这一点。

此代码填充了列表框控件。 //清除列表框中的所有项目             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();
            }
        }

任何帮助都会有很大的吸引力。

1 个答案:

答案 0 :(得分:2)

您可以定义所选项目的类型,并使用简单条件将其从列表中删除。通过索引删除也不会帮助你。传递整个对象

object item = ViewListBox.SelectedItem;

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

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

更新一个问题 - 您可以通过将SelectedIndexlistOfPickups长度进行比较来确定项目来源,因为您首先要添加提货项目。如果index大于拾取次数,则表示您正在删除传递。从所选索引中减去拾取次数,以获取您需要删除的交付项目的索引。

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);
}