2016-02-19 26 views
5

Ho un ciclo in un'azione di pulsante per la rimozione di elementi vuoti nel mio ListView, ma il problema è che, quando premo il pulsante, vengono eliminati con successo solo gli elementi singoli. Voglio dire: non rimuove gli elementi, quando ci sono pochi uno dopo l'altro:Rimozione di elementi in ListView

esempio:

a1 = "" 
a2 = "qwe" 
a3 = "" 
a4 = "" 
a5 = "qwe" 

così, dopo scatto del tasto, il risultato sarà:

a2 = "qwe" 
a3(or a4 idk) = "" 
a5 = "qwe" 

penso è un problema logico facile, ma non riesco a capirlo.

for (int i = 0; i < listView1.Items.Count; i++) 
      { 
       if (listView1.Items[i].SubItems[2].Text == "") 
       { 
        listView1.Items[i].Remove(); 
       } 
      } 

Quindi il problema è che il ciclo salta un controllo dopo aver trovato il valore vuoto. Come posso risolvere il problema?

risposta

4

Quando rimozione di elementi in una for loop, cappio all'indietro:

for (int i = listView1.Items.Count - 1; i >= 0; --i) 
    if (listView1.Items[i].SubItems[2].Text == "") 
    listView1.Items[i].Remove(); 

o modificare il ciclo in

for (int i = 0; i < listView1.Items.Count;) // no ++i here 
    if (listView1.Items[i].SubItems[2].Text == "") 
    listView1.Items[i].Remove(); 
    else 
    i += 1; // ...but it's here 

Questo è un principio comune di là ListView articoli. Vedi cosa ti da su: immaginate che si desidera rimuovere A dalla raccolta

[A, A, B, A] 

quando hai trovato che è oggetto 0a deve essere eliminato, è non si dovrebbe incrementare contatore dopo la cancellazione, ma prova nuovo voce 0a di nuovo.

+1

Smart. Grazie mille! –

Problemi correlati