C# 保留最后N个项目,并从列表框中删除其他项目

C# 保留最后N个项目,并从列表框中删除其他项目,c#,.net,winforms,listbox-control,C#,.net,Winforms,Listbox Control,我有一个带列表框的WinC窗体。我正在尝试删除除最后5项之外的所有项目。列表框排序设置为升序 列表框中的项目如下所示: 2016-3-1 2016-3-2 2016-3-3 2016-3-4 ... 2016-03-28 这是我删除开始项的代码 for (int i = 0; i < HomeTeamListBox.Items.Count - 5; i++) { try { HomeTeamListBox.Items.RemoveAt(i); }

我有一个带列表框的WinC窗体。我正在尝试删除除最后5项之外的所有项目。列表框排序设置为升序

列表框中的项目如下所示:

2016-3-1
2016-3-2
2016-3-3
2016-3-4
...
2016-03-28
这是我删除开始项的代码

for (int i = 0; i < HomeTeamListBox.Items.Count - 5; i++)
{
    try
    {
        HomeTeamListBox.Items.RemoveAt(i);
    }
    catch { }
}

我还尝试了HomeTeamListBox.Items.RemoveAtHomeTeamListBox.Items[I]

每次循环时,索引i将增加一个,但每次循环时将删除一个元素。您要做的是在前5个过程中删除索引0处的每个元素。所以用你的电流做循环

HomeTeamListBox.Items.RemoveAtHomeTeamListBox.Items[0]


是你想要在身体里的东西。

你的索引i每次循环都会增加一个,但是每次循环都会删除一个元素。您要做的是在前5个过程中删除索引0处的每个元素。所以用你的电流做循环

HomeTeamListBox.Items.RemoveAtHomeTeamListBox.Items[0]

是您想要在正文中显示的内容。

当列表中的项目超过n个时,您应该从列表的开头删除项目。 这样,您可以保留以下最后n项:

当列表中的项目超过n个时,您应该从列表的开头删除项目。 这样,您可以保留以下最后n项:


这应该对你有用

if(HomeTeamListBox.Items.Count > 5)
{
    var lastIndex = HomeTeamListBox.Items.Count - 5; 
    for(int i=0; i < lastIndex; i++)
    {
       HomeTeamListBox.Items.RemoveAt(i);
    }
}

这应该对你有用

if(HomeTeamListBox.Items.Count > 5)
{
    var lastIndex = HomeTeamListBox.Items.Count - 5; 
    for(int i=0; i < lastIndex; i++)
    {
       HomeTeamListBox.Items.RemoveAt(i);
    }
}

代码是正确的,有什么问题吗?@AshkanMobayenKhiabani代码不正确。它绕过了一些项目。例如,索引1处的项目将不会使用此代码删除。OP删除索引0处的项,然后项向上移动,以前位于索引1处的项现在位于索引0处。因此,当OP试图删除索引1处的项目时,意外地他会看到在开始时位于索引2处的项目被删除,以此类推。代码正确,有什么问题?@AshkanMobayenKhiabani代码不正确。它绕过了一些项目。例如,索引1处的项目将不会使用此代码删除。OP删除索引0处的项,然后项向上移动,以前位于索引1处的项现在位于索引0处。因此,当OP尝试删除索引1处的项目时,意外地他会看到在开始时位于索引2处的项目被删除,以此类推。感谢Reza,修复了它。感谢Reza,修复了它。
for(int i = HomeTeamListBox.Items.Count-5; i>=0; i--)
{
    HomeTeamListBox.Items.RemoveAt(i);
}