2016-03-27 17 views
1

ListBox'lu bir C# Winform var. Son 5 öğe dışındaki tüm öğeleri kaldırmaya çalışıyorum. ListBox sıralama, Artan olarak ayarlanır. ListBoxSon N öğesini saklayın ve diğer ürünleri kaldırmak ListBox

ürün aşağıdaki gibi görünecektir:

2016-3-1 
2016-3-2 
2016-3-3 
2016-3-4 
... 
2016-03-28 

İşte başlayarak öğeleri kaldırmak için benim koddur.

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

Ben de ben birine bu döngüler her zaman artacağı gidiyor

+0

kod doğruysa, sorun nedir? –

+0

@AshkanMobayenKhiabani Kod doğru değil. Bazı öğeleri atlar. Örneğin, bu kod kullanılarak 1 dizinindeki öğe kaldırılmayacaktır. OP, 0 dizinindeki öğeyi kaldırır, sonra öğeler artar ve daha önce indeks 1 olan öğe şimdi dizin 0'dadır. Böylece OP, indeks 1'deki öğeyi kaldırmayı denediğinde, beklenmedik bir şekilde dizinde bulunan öğeyi görür. Başlangıçta 2, kaldırılır ve böyle devam eder. –

cevap

5

Listede n'dan fazla öğe varken, listenin başından öğeleri kaldırmalısınız.
Bu şekilde ListBox son n öğeleri tutabilir:

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

Teşekkürler Rıza, bu düzeltildi. –

0

Kişisel endeksi HomeTeamListBox.Items.RemoveAt(HomeTeamListBox.Items[i]); denedim, ama size her seferinde bir elemanını döngü çıkarmadan olacak. Ne yapmak istediğiniz, ilk 5 geçiş için her bir öğeyi 0 dizininde kaldırmanızdır. Bu nedenle, şu anki döngü için

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

Vücudunda istediğin şey bu.

0

Bu sizin için çalışması gerekir;

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); 
} 
İlgili konular