Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con ciclo For ..next

Un saluto a tutti i partecipanti al NG.
Vorrei inserire in una Combobox, le estensioni dei file contenuti in una
determinata cartella, ovviamente evitando di caricare doppioni.
Ho inserito questa routine, ma purtroppo non mi carica niente, e non mi da
alcun errore :
dim file as string
dim est as string
dim i as integer
file = Dir(miopath,vbNormal)
do while file <> ""
est = Mid$(file, instr(1,file,"."), 4)
for i = 0 to Combo1.listcount - 1
if est <> Combo1.list(i) then
Combo1.additem est
end if
next
file = Dir
loop
Combo1.Refresh
Dov'è l'errore ?
Grazie per l'aiuto.
Un saluto a tutti.
Daniele (Verona)

 Inanzitutto ti consiglio di indentare il codice. Sarà più leggibile sia da
parte tua che da chi lo studi (come me ora) per trovare il problema.
Ci ho dato un occhio e l'ho modificata. Ecco qua il codice!
Il problema fondamentale stava nella ricerca dell'estensione all'interno del
combo.
Ora funziona.
CiaoZ
SebaMix
    Dim file As String
    Dim est As String
    Dim i As Integer
    Dim blnTrovato As Boolean
    blnTrovato = False
    ' Pulisco il combo (lo svuoto)
    Combo1.Clear
    ' Controlla se metti anche la "/*.*" nella path di ricerca
    file = Dir(App.Path & "\*.*", vbNormal)
    Do While file <> ""
        est = Mid$(file, InStr(1, file, "."), 4)
        est = Replace(est, ".", "") ' Se ci metti questo sparisce il "."
        ' Vado avanti a cercare l'estensione nel combo finchè
        ' non la trovo. Se la trovo alla fine del ciclo blnTrovato
        ' è vero altrimenti è falso.
        For i = 0 To Combo1.ListCount - 1
            If est = Combo1.List(i) Then ' L'ho trovata!!!
                blnTrovato = True
                Exit For ' Esco dal ciclo (non occorre continuare)
            End If
        Next i
        ' Non ho trovato l'estensione!
        If blnTrovato = False Then
            Combo1.AddItem est ' Aggiungo l'estensione al combo
        End If
        ' Resetto la variabile
        blnTrovato = False
        ' Passo al file successivo
        file = Dir
    Loop
    Combo1.Refresh

 wrote in message
9bk57h$b30$1...@fe1.cs.interbusiness.it...

I vecchi volponi della programmazione sanno che in questi casi
bisogna stare attenti al PRIMO ed all'ULTIMO elemento di un loop,
che potrebbero essere casi PARTICOLARI.
Nella fattispecie, il caso particolare è proprio il primo:
Se non c'è nulla nella Combo1, listcount avrà valore 0,
per cui il test iniziale dell'istruzione FOR verrà eseguito
con i valori: "For i = 0 to 0 - 1".
Questo significa che il ciclo For non verrà eseguito dato
che il valore finale ECCEDE il valore iniziale.
Di conseguenza, visto che l'alimentazione della Combo
è all'interno del loop, la Combo non verrà MAI riempita.
Tra l'altro, anche il loop non funziona. Ammesso che la
Combo contenga già diversi dati, tu controlli che il dato
corrente sia diverso da quello che vuoi inserire; quindi,
APPENA viene trovato un valore diverso (o nel PRIMO
elemento, o al massimo nel SECONDO), il nuovo
elemento verrà inserito.
In conclusione, dovresti modificare il source in questo modo:
(non ti scrivo il source perché non è bello fare "copia e incolla",
ma è meglio imparare come si fa a scrivere un prg.)
- controllare se si tratta del caso particolare della Combo vuota
   (inserire il nuovo elemento senza cercare)
- in caso la Combo non è vuota, SCORRERLA TUTTA e se non
   si trova un'estensione uguale a quella presa in esame, inserirla.
(suggerimento: prima del For imposta una variabile booleana,
ad esempio "Trovata = False", ed all'interno del For, se trovi
l'estensione, impostala a True. All'uscita del For, se Trovata = False,
vuol dire che devi inserire la nuova estensione)
In bocca al lupo !... :-)))
--
Er Roscio.

 ha scritto nel messaggio
news:9bka5o$m93$1...@fe1.cs.interbusiness.it...


 ha scritto nel messaggio
news:9bk97a$9sssn$1...@ID-66833.news.dfncis.de...


 Ora funziona.
Ehm... ne sei sicuro ?... :-)))
Quando ci entra nel loop ?...
--
Er Roscio.

Il problema del loop c'č e non c'č... comunque quando il DataCombo č vuoto
blnTrovato vale False quindi l'estensione viene inserita. L'ho provato e
funzionava!
Ora lo testo togliendo il "- 1"
CiaoZ
SebaMix

Senza "- 1" sembra funzionare uguale... ma non č cosě.
Infatti ad ogni ciclo se ci si mette "-1" non controlla l'ultimo inserito...
:(
Quindi potrebbe esserci una replica di un'estensione.
E' un caso abbastanza sfigato, ma potrebbe presentarsi... ;)
CiaoZ
SebaMix

 funzionava!
Ehehehe... Hai ragione, č vero !... :-)))
Non mi ero accorto che hai portato (giustamente) l'AddItem,
all'esterno del For.
--
Er Roscio.