Domanda

Esiste un modo per rimuovere un elemento da una casella di riepilogo basato su una stringa?

Gioco da alcuni minuti ed ecco quello che ho fatto finora ma non funziona

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

Potrei semplicemente passare in rassegna ogni elemento ma volevo fare qualcosa di un po 'più elegante

È stato utile?

Soluzione

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

Altri suggerimenti

Sulla base del tuo esempio, farei qualcosa del genere;


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

Il problema che probabilmente stai riscontrando è che stai modificando l'elenco mentre stai itando su questo. Questo è un grande no-no, ed è stato coperto fino alla nausea su questo sito.

In base al titolo della tua domanda sembra che tu non voglia rimuovere ogni elemento, solo alcuni di essi. In tal caso:

for (int i = LB_upload.Items.Count - 1; i >= 0; i--)
{
    if (somecondition)
    {
        ftp.Upload(LB_upload.Items[i]);
        LB_upload.Items.RemoveAt(i);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top