C# 确定列表框项目的来源

C# 确定列表框项目的来源,c#,winforms,list,object,.net-4.0,C#,Winforms,List,Object,.net 4.0,我正在开发一个应用程序,它要求我有一个列表框来保存数据 我在从列表框中删除对象时遇到了一个小问题。当我用两个单独列表中的项目填充列表框时,这个问题就开始出现了 通常,要删除对象,我会获取其索引,然后在单独的类中将其从列表中删除,然后重新加载列表框以反映更改,但在某些情况下,我需要使用来自两个不同列表的对象填充列表框,并确定要从两个列表之一删除的对象的来源,嗯,我不完全确定怎么做 此代码正在填充列表框控件。 //清除列表框中的所有项目 ViewListBox.Items.Clear() 这就是当我

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

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

通常,要删除对象,我会获取其索引,然后在单独的类中将其从列表中删除,然后重新加载列表框以反映更改,但在某些情况下,我需要使用来自两个不同列表的对象填充列表框,并确定要从两个列表之一删除的对象的来源,嗯,我不完全确定怎么做

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

这就是当我仅从一个列表加载列表框时删除的方式

        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();
            }
        }
if(ViewListBox.SelectedIndex<0)
{
EditSelectBtn.Enabled=false;
DeleteSelectBtn.Enabled=false;
}
其他的
{
如果(MessageBox.Show(“您确定要删除所选项目吗?”,“您确定吗?”,MessageBox Buttons.YesNo)=DialogResult.Yes)
{
visits.RemovePick(此.ViewListBox.SelectedIndex);
//刷新列表框。
更新列表(“拾取”);
}
其他的
{
//没有,所以什么也不要做!
ViewListBox.ClearSelected();
}
}

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

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);
}
listOfPickups=visions.listPickups();
ListListofDeliveries=visions.listDeliveries();
ViewListBox.Items.AddRange(listOfPickups.ToArray());
ViewListBox.Items.AddRange(listOfdeliveries.ToArray());
//...
如果(ViewListBox.SelectedIndex
Metro?WinForms?WPF?银灯?Windows Phone?ASP.Net?MonoTouch?我该如何实现它?对不起,如果我说实话,我以前从未使用过列表,我正在学习,但剩余的时间有限。(一天)教会我把事情留到最后一分钟。永远不要学习更新部分?谢谢。你们的名单是什么类型的?它是通用的
列表
类吗?那么什么类型的
T
?您的送货和取货物品是否属于不同的类别?您好,送货和取货分为两个不同的类别。每次创建“访问”时,我都会创建一个新的收货/发货对象,该对象会添加到“访问”类的列表中。这些是列表私有列表拾取=新列表();私有列表交付=新列表();我添加了按索引删除项目的示例。顺便说一句,送货和提货有相同的基类吗?太好了!非常感谢你给我的巨大帮助!它在其他方面也帮助了我!再次谢谢,先生。
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);
}