codice:
Public Function timer() 'Perchè una FUNCITON e non una SUB?
ProgressBar1.Min = 0 'A meno che non ci siano altre funzioni che modificano questo valore, non importa risettarlo ogni volta
ProgressBar1.Max = 100 'A meno che non ci siano altre funzioni che modificano questo valore, non importa risettarlo ogni volta
If ProgressBar1.Value = ProgressBar1.Max Then ''Se .value = .max ==> Disattiva Command2
Command2.Enabled = True
ElseIf ProgressBar1.Value = ProgressBar1.Max Then 'Se .value = .max ==> Disattiva il timer (att.ne se questa condizione è vera è vera pure quella dell'if precedente quindi qua non ci arriverà mai)
Timer1.Enabled = False
'PUNTO A
End If
ProgressBar1.Value = ProgressBar1.Value + 1 'incrementa .value di 1 (nota: pure se è già al massimo).
End Function
L'errore nel codice che causava il problema è che l'incremento della ProgressBar viene effettuato anche quando il valore è già al massimo.
O metti un "exit function" nella riga che ti ho evidenziato con PUNTO A oppure aggiungi un controllo prima di incrementare.
Inoltre Hai messo 2 IF in cascata con la medesima espressione di controllo. Questo fa si che il timer non venga praticamente mai disattivato.
Un esempio "tradizionale":
codice:
Public sub timer()
dim cond as boolean
if ProgressBar1.Value < ProgressBar1.Max then
ProgressBar1.Value = ProgressBar1.Value + 1
else
Command2.Enabled = true
Timer1.Enabled = false
endif
End Function
Un esempio un "po' particolare":
codice:
Public sub timer()
dim cond as boolean
cond= (ProgressBar1.Value < ProgressBar1.Max)
Command2.Enabled = not(cond) 'Abilita Command2 se la PB1 è al massimo, altrimenti disabilitalo.
Timer1.Enabled = cond 'Disabilita Timer se PB1 è al massimo, abilitalo in caso contrario.
If cond Then ProgressBar1.Value = ProgressBar1.Value + 1
End Function
Questa procedura funziona così:
1. Verifica la consizione in cui si trova la progressBar.
2. Abilita/disabilita controlli/Timer a seconda della condizione
3. Se necessario incrementa la progress bar