【问题标题】:How to remove item from generic list that relates to item in listbox?如何从与列表框中的项目相关的通用列表中删除项目?
【发布时间】:2013-07-20 06:41:19
【问题描述】:

我四处寻找,但找不到任何参考资料。

如何删除与listbox 中的项目相关的通用列表中的项目?

我目前有一个public static List<Employees> 和一个名为lstRecordslistbox,我可以删除listbox 中的项目就好了,但要么从列表中删除所有内容,要么什么都不删除。

这是我使用的第一组代码:

private void DeleteRecord()
{
        if (lstRecords.Items.Count > 0)
        {
            for (int i = 0; i < lstRecords.Items.Count; i++)
            {
                if (lstRecords.GetSelected(i) == true)
                {
                    Employees employeeRecord = lstRecords.SelectedItem as Employees;
                    employee.Remove(employeeRecord);
                }
            }



            lstRecords.Items.Remove(lstRecords.SelectedItem);
        }
    }  
}

这是我使用的第二组代码,我的 List 就在部分类下,但这都包含在一个方法中。

private void DeleteRecord()
{
        ListBox lstRecords = new ListBox();
        List<object> employee = new List<object>();
        employee.RemoveAt(lstRecords.SelectedIndex);
        lstRecords.Items.RemoveAt(lstRecords.SelectedIndex);
}  

到目前为止,我还没有让任何一组代码按照我想要的方式工作,我显然做错了什么。

我还玩过其他一些代码块,但它们似乎朝着正确的方向发展。

最终我需要能够双击列表中的一个项目来拉出属性菜单。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 那么你有什么错误吗?您可以发布您的代码部分以将项目插入列表吗?
  • 你的第二个代码对我来说太荒谬了:)。您创建了完全空的 List&lt;&gt;ListBox 并从中删除选定的项目。 :)) 这很有趣。你的实际List&lt;&gt;ListBox 在哪里?
  • 感谢您帮助编辑我的标题。下次我会努力观察的。
  • 您是否尝试单步执行您的代码并查看如何以及何时输入第二个 if 语句?我发现您使用两种选择方法令人困惑:lstRecords.GetSelected() 和 lstRecords.SelectedItem。

标签: c# winforms


【解决方案1】:

您的代码运行良好,您只需进行一些小的更改。 第一个代码块是好的,但我不知道你的 lstRecords 在哪里。 但是看看这只是复制代码并在您的员工对象中有一些记录后运行它。

它在代码中创建一个列表框,然后将其添加到表单(Winforms)中并具有全局 lstRecords。

ListBox lstRecords;
    private void IntializeDemoListbox()
    {
        lstRecords = new ListBox();
        this.Controls.Add(lstRecords);

        foreach (var item in employee)
        {
            lstRecords.Items.Add(item);
        }
    }

然后您将能够使用您的第一组代码,另一组将是这样的。

private void DeleteRecord()
{
        employee.RemoveAt(lstRecords.SelectedIndex);
        lstRecords.Items.RemoveAt(lstRecords.SelectedIndex);
}  

【讨论】:

  • 是的!你太棒了。起初它不起作用,但我将 lstRecords 更改为 lstRecords1 并且有效。为什么会这样?是不是因为另一个列表不是全球性的?(我只是在这里猜测)。
  • 我想我明白了,不管怎样,这就是我需要的。再次感谢您。
  • 嗯,第一个问题是你可能有歧义的名字。是的,您需要将列表全局化,以便其他方法可以使用它,并且每次调用 = new 时,您实际上是在创建该对象的新实例,并且您以前的所有数据都将丢失。您现在可以标记我的答案作为“已回答”,谢谢:)
【解决方案2】:

您要做的是将您的 ListBox 绑定到您的员工列表。这篇文章显示了绑定,而 cmets 也显示了删除代码。这个想法是,当您从 DataSource 中删除一个项目时,您将不会在 ListBox 中看到它。

Binding Listbox to List<object>

DeleteRecord() 方法的问题在于您刚刚创建的 lstRecords 对象不是表单上的 ListBox。

【讨论】:

  • 好的,我已经按照您在此处发布的内容进行了操作。我已经输入了lstRecords.DataSource = employee; employee.Remove((Employees)lstRecords.SelectedValue); 但是,它仍然删除了我列表中的两个对象,并在所有记录点的 EmployeeForm.Employees 列表中给出了一个值。
  • 它几乎成功了,我遇到了一些问题,它正在扭转我的一些记录,例如:史密斯,约翰转向约翰,史密斯。我要去玩一下这个。感谢大家给我一些工作。非常感谢。
  • 如果它同时删除两个对象,听起来您可能已经将同一个对象添加到列表中两次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2010-11-29
  • 2011-06-21
  • 1970-01-01
  • 2022-12-20
相关资源
最近更新 更多