c# - 确定列表框项目的来源

标签 c# winforms list object .net-4.0

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

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

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

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

任何帮助将不胜感激。

最佳答案

您可以定义所选项目的类型,并通过简单的条件将其从列表中删除。另外,按索引删除在这里也无济于事。改为传递整个对象

object item = ViewListBox.SelectedItem;

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

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

更新有一个问题 - 您可以通过将 SelectedIndexlistOfPickups 长度进行比较来确定商品来源,因为您首先要添加自取商品。如果索引大于取件计数,则您将删除递送。从所选索引中减去取件计数即可获取您需要删除的配送项目的索引。

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

关于c# - 确定列表框项目的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13664620/

相关文章:

c# - 如何从 C# Windows 应用程序获取互联网 IP 地址

c# - 如何设置刻度线的间隔?

python - 根据value项获取key

Java - 列表还是数组?

c# - 将 PictureBox 图像插入到 Sql Server 数据库中

python - 获取排序的索引列表,用于按给定键排序的字典列表

c# - 错误 "Property ' 厘米 :title' doesn't exsist"while using DotCMIS for Alfresco

c# - 为什么登录时需要returnUrl? Url.IsLocalUrl(字符串 returnUrl)

c# - 在 C# 中循环表单

c# - 如果隐藏某些行,datagridview 自动滚动?