2016-03-27 8 views
1

У меня есть C# Winform с ListBox. Я пытаюсь удалить все элементы, кроме последних 5 элементов. Для сортировки ListBox установлено значение «По возрастанию».Сохранять последние N элементов и удалять другие элементы из списка ListBox

Элементы в 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]);

+0

код является правильным, в чем проблема? –

+0

@AshkanMobayenKhiabani Неверный код. Он обходит некоторые предметы. Например, элемент, который находится в индексе 1, не будет удален с помощью этого кода. OP удаляет элемент с индексом 0, затем элементы поднимаются, и элемент, который ранее был в индексе 1, теперь находится в индексе 0. Поэтому, когда OP пытается удалить элемент в индексе 1, неожиданно он увидит элемент, который был в индексе 2 при запуске, удаляется и так далее. –

ответ

5

В списке более n элементов, вы должны удалить элементы с начала списка.
Таким образом, вы можете сохранить последние n элементы из ListBox:

var n = 5; 
while (listBox1.Items.Count > n) 
{ 
    listBox1.Items.RemoveAt(0); 
} 
+0

Спасибо, Реза, что исправил его. –

0

Ваш индекс я намерен увеличить на единицу каждый раз, когда он петлями, но вы собираетесь быть удаление элемента каждый раз, когда вы цикл. То, что вы хотите сделать, - удалить каждый элемент с индексом 0 для первых 5 проходов. Таким образом, используя текущий ток для цикла

HomeTeamListBox.Items.RemoveAt (HomeTeamListBox.Items [0]);

Это то, что вы хотите в теле.

0

Это должно работать для вас;

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

 Смежные вопросы

  • Нет связанных вопросов^_^