Quote Originariamente inviata da oregon Visualizza il messaggio
1) modifichi il valore dell'indice dela For I all'interno del ciclo mentre questo sta operando (non è un buona regola di programmazione)

2) è ovvio che all'uscita dal ciclo for J sia arrivato oltre il valore di ListBox1.Items.Count-1 e quindi che a quel punto non debba essere utilizzato come valore indice della stessa listbox (è la base di funzionamento della For..Next, in VB5 come in tutte le altre versioni)

3) la If (Y = 1) = True non ha senso ... basta scrivere If Y = 1 e funziona ugualmente.
Sono mortificato: hai perfettamente ragione! Eppure - lo giuro - il programma ha iniziato a funzionare benissimo soltanto quando ho scritto If (Y = 1) = True. Con la forma If (Y = 1) = True, facendo elaborare una riga alla volta, nella finestra di "controllo immediato", digitando
? Y = 1
...risultava:
False

Poi mi sono ricordato di aver letto da qualche parte (ma non ricordo dove) che, a differenza delle versioni precedenti di VB, in fase di controlli If ... Then, il compilatore VB.NET converte automaticamente il valore dell'espressione IF in booleano e ricordavo che True non è =1 (oppure False non è =0, non ricordo bene).
Rimane da chiedersi perché diavolo il programma ha iniziato a funzionare bene soltanto con If (Y = 1) = True. Ora funziona indifferentemente con entrambe le versioni. Mah...

Per quanto riguarda l' "uscita" da For ... Next, hai ancora (potevi dubitarne?) ragione tu: a parte l'errore concettuale (all'uscita, il valore di J era più alto di quello che mi serviva e avrebbe comunque comportato un errore) l'errore segnalato - e che impedisce del tutto l'inizio dell'elebaorazione - è J non dichiarato: Non è accessibile a causa del livello di protezione. Tra l'altro, procedendo un'istruzione alla volta nella versione funzionante, all'uscita del ciclo For J posizionando il mouse su J, il compilatore addirittura si rifiuta di fornire il valore, nemmeno null o simile!
Visual Basic 5 (da cui provengo) mi aveva viziato, nel senso che accettava tali ineleganze. Cosa che VB.NET non lascia passare.
Grazie ancora per i consigli.