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

时间:2013-07-19 21:48:50

标签: c# winforms

我搜索过但找不到任何参考资料。

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

我目前有一个名为public static List<Employees>的{​​{1}}和一个listbox,我可以删除lstRecords中的项目,但是要么从列表中移除所有项目,要么什么都没有。

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

listbox

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

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

到目前为止,我还没有按照我希望的方式使用任何一组代码,我显然做错了。

我还有其他一些代码块,但这些代码似乎朝着正确的方向发展。

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

2 个答案:

答案 0 :(得分:0)

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

Binding Listbox to List<object>

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

答案 1 :(得分:0)

您的代码运行正常,您只需进行一些小的更改。 第一个代码块是Ok但是我不知道你的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);
}