2009-09-09 59 views
0

有沒有一種方法可以從列表框中刪除基於字符串的項目?搜索並從列表框中刪除項目

我一直在玩弄了幾分鐘,這裏是我有這麼遠,但它不工作

foreach(string file in LB_upload.Items) 
{ 
    ftp.Upload(file); 
    int x = LB_upload.Items.IndexOf(file); 
    LB_upload.Items.RemoveAt(x); 
} 

我可以只通過每個項目的循環,但我想要做的東西多一點優雅

+0

它不起作用,因爲您正在更改您正在迭代的IEnumerable 。 – Bavo 2009-09-09 14:36:29

回答

2
while(LB_upload.Items.Count > 0) 
{ 
    ftp.Upload(LB_upload.Items[0].ToString()); 
    LB_upload.Items.RemoveAt(0); 
} 
+0

我也喜歡這個,但我認爲約翰卡夫是贏家 – Crash893 2009-09-09 15:03:20

+0

我改變了這個答案。我不得不添加一個this.refresh來顯示框的更新。原因是因爲我想1)顯示文件正在移動,2如果出現問題,您會看到剩下的文件。 – Crash893 2009-09-09 17:08:01

2

根據你的例子,我會做類似的事情;


foreach(string file in LB_upload.Items) 
{ 
    ftp.Upload(file); 
} 
LB_upload.Items.Clear(); 

您可能遇到的問題是您在迭代此過程時正在更改列表。這是一個很大的禁忌,並且在這個網站上已經被廣泛討論。

+0

LOL,很好的解決方案! – 2009-09-09 14:40:34

+0

哈耶我猜這是最優雅的方式(1行代碼)。 – Crash893 2009-09-09 15:02:36

2

根據您的問題的標題,它聽起來像你不想刪除每個項目,只是其中的一些。如果是這樣的話:

for (int i = LB_upload.Items.Count - 1; i >= 0; i--) 
{ 
    if (somecondition) 
    { 
     ftp.Upload(LB_upload.Items[i]); 
     LB_upload.Items.RemoveAt(i); 
    } 
} 
+0

+1感謝您的想法 – Crash893 2009-09-09 15:04:06