Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da GrandeTimoniere Visualizza il messaggio
    1) Prova a scrivere la routine evitando ...
    Beh, ovviamente se modifichi parte del codice è ovvio che puoi avere malfunzionamenti, ma si deve capire il perché.

    Il fatto è sostanzialmente che il codice non è chiaro ...

    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.

    E' anche importante capire come hai dichiarato tutte le variabili all'inizio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #2
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.