Nota: Questo funziona già bene, ma sto cercando di capire perché funziona in questo modo, ma non l'altro.Confusione di codice: perché uno funziona, ma non l'altro?
Ho una WinForm (C#) con messo dinamicamente le immagini, in questo modo:
Ora, se si fa clic sul pulsante 'Napred', queste immagini dovrebbero essere cancellati (tra le altre cose), per il quale ho inizialmente utilizzato:
foreach(Control ctrl in Controls)
if(ctrl is PictureBox) ctrl.Dispose();
o
for(int i = 0; i < Controls.Count; i++)
if(Controls[i] is PictureBox) Controls[i].Dispose();
Ora, se corro questo, ottengo:
Ma se mi limito a cambiare la dichiarazione for
per inviarlo a ritroso, è funziona?
for(int i = Controls.Count - 1; i >= 0; i--)
if(Controls[i] is PictureBox) Controls[i].Dispose();
(io non ho intenzione di caricare un'altra immagine, ma elimina tutti gli elementi (ho solo i pulsanti sinistro alla fine))
Qualcuno può illuminarmi perché si lavora , ma non l'altro?
EDIT: sto usando community edition VS2015 su Windows 10 se si tratta di un errore di debug
Se si dispone di un array di 10 elementi e quindi eliminare Item1, Item2 diventerà nuovo Item1 e avrai 9 articoli rimanenti. Il metodo standard di smaltimento degli elementi dell'array consiste nel passarlo indietro. – LightBulb
Potrebbe essere di interesse per altri approcci: http://stackoverflow.com/questions/7340757/c-sharp-list-removing-items-while-looping-iterating –
Perché non usi il metodo Remove? –