Terminiamo oggi la parte relativa alle strutture di
controllo introducendo gli ultimi due costrutti.
Cicli Do While.. Loop e Do Until .. Loop
La struttura Do...Loop consente di eseguire un blocco di istruzioni
per un numero di volte imprecisato (contrariamente al FOR). L'istruzione
Do...Loop valuta una condizione che consente di determinare
se continuare o meno l'esecuzione. Come per la struttura If...Then,
la condizione deve essere rappresentata da un valore o da un'espressione
che risulti Vera o Falsa. La parola chiave DO identifica linizio
del ciclo, mentre LOOP indica la fine.
Esistono 4 varianti del ciclo Do
Loop; le prime due sono determinate
dalla differenza tra While ed Until.
In presenza di un While un ciclo viene eseguito fino a che
la condizione risulta Vera; non appena la condizione diventa falsa,
il ciclo viene interrotto.
Viceversa lUntil viene eseguito finchè
la condizione non è verificata ed è interrotto non appena diventa
Vera.
E possibile diversificare ulteriormente il ciclo Do..Loop
mettendo la condizione allinizio (dopo il DO) oppure alla
fine, dopo la parola chiave LOOP, la differenza sostanziale è che,
mettendo la condizione alla fine, il ciclo viene eseguito sicuramente
almeno una volta anche se la condizione di partenza non è Vera.
Abbiamo dunque ottenute le seguenti combinazioni:
Do While condizione Do
<istruzioni> <istruzioni>
Loop Loop While condizione
Do Until condizione Do
<istruzioni> <istruzioni>
Loop Loop Until condizione
Esempio:
stampiamo CIAO finchè lutente non risponde NO alla domanda
Vuoi stampare? nei quattro possibili casi:
Private Sub CmdStampa_Click()
Do While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)
Print "CIAO"
Loop
End Sub
Lo stesso risultato si ottiene utilizzando il DO UNTIL e quindi
negando la condizione precedente
Do Until (MsgBox("Vuoi
stampare?", vbYesNo) = vbNo)
Print "CIAO"
Loop
Un risultato leggermente diverso lo possiamo avere mettendo la condizione
alla fine: nei due casi precedenti CIAO non viene stampanto se lutente
risponde NO alla prima domanda, mettendo la condizione alla fine,
CIAO viene stampato sicuramente almeno una volta:
Do
Print "CIAO"
Loop While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)
Do
Print CIAO
Loop Until (MsgBox("Vuoi stampare?", vbYesNo) = vbNo)
Utilizzando il ciclo Do..Loop è possibile riprodurre il costrutto
FOR, in questo caso ovviamente, bisogna farsi carico di inizializzare
ed incrementare il contatore.
Esempio:
riprendiamo il ciclo che visualizza i numeri da 0 a 10
Dim Conta as integer
Conta=0
Do While Conta <= 10
Msgbox Str(Conta)
Conta=Conta+1
Loop
ATTENZIONE!
In cicli di questo tipo è bene non dimenticarsi lincremento
del contatore, in tal caso, infatti, la condizione non diventa mai
Vera e si genera un LOOP INFINITO.
Listruzione Select Case
Select Case è analogo a If...Then...Else, ma è più indicato e migliora
la leggibilità del codice nel caso di più scelte.
Si basa su un'unica espressione di prova che viene valutata una
volta all'inizio della struttura stessa. Il risultato di tale espressione
viene confrontato con il valore di ciascuna istruzione Case della
struttura e in caso di corrispondenza viene eseguito il blocco di
istruzioni associato all'istruzione Case:
Select Case <espressione>
[Case <espressione1>
[bloccoistruzioni-1]]
[Case <espressione2>
[bloccoistruzioni-2]]
.
..
[Case Else
[bloccoistruzioni-n]]
End Select
Esempio:
La MsgBox (vedere approfondimento dopo) può restituire 3 risultati
differenti (esempio SI, NO, ANNULLA), in tal caso avremmo bisogno
di 2 costrutti IF per valutare le istruzioni da eseguire.
In tal caso è consigliabile utilizzare il Select..Case
Private Sub CmdProva_Click()
Dim Ris As Integer
Ris = MsgBox("Che tasto hai scelto", vbYesNoCancel)
Select Case Ris
Case vbYes
Msgbox SI
Case vbNo
MsgBox "NO"
Case vbCancel
MsgBox "ANNULLA"
Case Else
End Select
End Sub
Approfondimenti sulla Msgbox
Avevamo anticipato la MsgBox (lezione 6) alla quale possiamo
indicare la frase da visualizzare. Oltre a questa frase, possiamo
specificare altre caratteristiche (denominate parametri). La sua
sintassi completa è:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Dove:
Prompt è la frase che viene visualizzata.
buttons è un valore numerico (solitamente rappresentato da
costanti fornite dal linguaggio) che rappresenta i bottoni che saranno
visualizzati (esempio SI, No, OK, Annulla). Se è omesso vale 0,
ovvero visualizza il solo tasto OK.
Alcuni possibili valori sono:
vbOKOnly (equivale al numero 0) visualizza solo il pulsante
OK.
VbOKCancel ( 1) visualizza i
pulsanti OK e Annulla.
VbAbortRetryIgnore ( 2) visualizza i
pulsanti Termina, Riprova, e Ignora.
VbYesNoCancel ( 3) visualizza i pulsanti
Sì, No e Annulla.
VbYesNo ( 4) visualizza i
pulsanti Sì e No.
Title è la frase visualizzata nella barra del titolo della
finestra di dialogo; se viene omesso verrà indicato il nome dell'applicazione.
Help e context servono nel caso in cui il nostro programma
preveda una guida in linea.
Msgbox è una funzione e come tale, restituisce un valore.
Il valore restituito dalla funzione MsgBox corrisponde al tasto
scelto dallutente tra quelli visualizzati. I possibili valori
che può assumere sono:
vbOK (equivale al numero
0) e corrisponde alla scelta del pulsante OK
vbCancel ( 2)
Annulla
vbAbort ( 3)
Termina
vbRetry ( 4)
Riprova
vbIgnore ( 5)
Ignora
vbYes ( 6)
Sì
vbNo ( 7)
No
Finalmente conosciamo i costrutti che stanno alla base del linguaggio
BASIC.
La prossima volta ci aspetta unaltra avventura:
le procedure e le funzioni. Non mancate!
Torna all'indice Generale del corso di Corso di Visual Basic di Software Planet