2016-03-27 16 views
1

私はリストボックスを持つC#Winformを持っています。私は最後の5項目を除くすべての項目を削除しようとしています。 ListBoxソートは昇順に設定されています。最後のN個のアイテムを保持し、リストボックスから他のアイテムを削除します。

リストボックス内の項目は、次のようになります。ここでは

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 { } 
} 

また、私は1で、それがループするたびに増加する予定ですが、あなたが要素にあなたループするたびに削除しようとしているHomeTeamListBox.Items.RemoveAt(HomeTeamListBox.Items[i]);

+0

コードが正しい、問題は何ですか? –

+0

@AshkanMobayenKhiabaniコードが正しくありません。一部の項目をバイパスします。たとえば、インデックス1にあるアイテムは、このコードを使用して削除されません。 OPはインデックス0のアイテムを削除し、アイテムが上がり、以前インデックス1にあったアイテムがインデックス0になります。したがって、OPがインデックス1のアイテムを削除しようとすると、予期せずにインデックスにあったアイテムが表示されます開始時に2、削除されるなどです。 –

答えて

5

リストにはn個以上の項目がありますが、リストの先頭から項目を削除する必要があります。
この方法であなたはListBoxの最後のnアイテムを保持することができます

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

ありがとうReza、それはそれを修正しました。 –

0

あなたのインデックスを試してみました。あなたがしたいのは、最初の5回のパスでインデックス0の各要素を削除することです。したがって、現在のForループを使用する

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); 
} 
関連する問題