保留最后 N 个项目并从 ListBox 中删除其他项目
Keep last N items and remove other items from ListBox
我有一个带列表框的 C# Winform。我正在尝试删除除最后 5 项之外的所有项目。列表框排序设置为升序。
ListBox 中的项目如下所示:
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.RemoveAt(HomeTeamListBox.Items[i]);
你的索引 i 将在每次循环时增加 1,但你将在每次循环时删除一个元素。您要做的是在前 5 次传递中删除索引 0 处的每个元素。所以使用你当前的 For Loop
HomeTeamListBox.Items.RemoveAt(HomeTeamListBox.Items[0]);
就是你想要的正文
虽然列表中有超过 n
个项目,但您应该从列表开头删除项目。
这样您就可以保留 ListBox
的最后 n
项:
var n = 5;
while (listBox1.Items.Count > n)
{
listBox1.Items.RemoveAt(0);
}
这应该适合你;
if(HomeTeamListBox.Items.Count > 5)
{
var lastIndex = HomeTeamListBox.Items.Count - 5;
for(int i=0; i < lastIndex; i++)
{
HomeTeamListBox.Items.RemoveAt(i);
}
}
for(int i = HomeTeamListBox.Items.Count-5; i>=0; i--)
{
HomeTeamListBox.Items.RemoveAt(i);
}
我有一个带列表框的 C# Winform。我正在尝试删除除最后 5 项之外的所有项目。列表框排序设置为升序。
ListBox 中的项目如下所示:
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.RemoveAt(HomeTeamListBox.Items[i]);
你的索引 i 将在每次循环时增加 1,但你将在每次循环时删除一个元素。您要做的是在前 5 次传递中删除索引 0 处的每个元素。所以使用你当前的 For Loop
HomeTeamListBox.Items.RemoveAt(HomeTeamListBox.Items[0]);
就是你想要的正文
虽然列表中有超过 n
个项目,但您应该从列表开头删除项目。
这样您就可以保留 ListBox
的最后 n
项:
var n = 5;
while (listBox1.Items.Count > n)
{
listBox1.Items.RemoveAt(0);
}
这应该适合你;
if(HomeTeamListBox.Items.Count > 5)
{
var lastIndex = HomeTeamListBox.Items.Count - 5;
for(int i=0; i < lastIndex; i++)
{
HomeTeamListBox.Items.RemoveAt(i);
}
}
for(int i = HomeTeamListBox.Items.Count-5; i>=0; i--)
{
HomeTeamListBox.Items.RemoveAt(i);
}