Dopo aver parlato, nella lezione precedente, della gestione degli errori in VB, possiamo aggiornare il visualizzatore di immagini che abbiamo realizzato nella lezione "I controlli DriveListBox, DirListBox e FileListBox", in modo da correggere quegli errori che si verificano, ad esempio, quando si seleziona un'unità non disponibile. Cominciamo proprio da questo punto. Avviate il programma e, nel DriveListBox, selezionate l'unità A: senza che nessun dischetto sia inserito: verrà generato l'errore di runtime 68, indicante una "periferica non disponibile". Dobbiamo aggiungere la gestione di questo errore nell'evento Drive1_Change, che viene eseguito quando si seleziona un'unità. Il codice originale
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Va modificato in questo modo:
Private Sub Drive1_Change()
On Error GoTo GestoreErrori
Dir1.Path = Drive1.Drive
Exit Sub
GestoreErrori:
If Err.Number = 68 Then
'Periferica non disponibile.
MsgBox "Impossibile accedere all'unità specificata. Selezionare un'unità diversa e riprovare."
Drive1.Drive = Dir1.Path
End If
End Sub
Come abbiamo detto, l'errore che dobbiamo gestire è il 68, quindi, come prima cosa, nella routine di gestione utilizziamo la proprietà Err.Number per controllare il numero dell'errore: se il problema è dovuto ad una periferica non valida, visualizziamo un messaggio di errore e, con l'istruzione Drive1.Drive = Dir1.Path, facciamo sì che l'unità selezionata corrisponda a quella di cui si stanno visualizzando le cartelle.
Un'altra situazione di errore nel programma si può avere quando, nel FileListBox, si seleziona un file immagine non valido, ad esempio perché danneggiato oppure perché, nonostante l'estensione, è un file di un altro tipo. In questo caso, selezionando tale file, verrà generato l'errore di runtime 481, cioè "immagine non valida". Ora il codice da modificare è quello contenuto nell'evento File1_Click; ecco la nuova routine:
Private Sub File1_Click()
On Error GoTo GestoreErrori
Dim FileSelezionato As String
FileSelezionato = File1.Path & "" & File1.FileName
Image1.Picture = LoadPicture(FileSelezionato)
Exit Sub
GestoreErrori:
If Err.Number = 481 Then
'Immagine non valida.
MsgBox "L'immagine selezionata non è valida."
End If
End Sub
Dopo quello che abbiamo detto il significato del codice appena scritto dovrebbe essere chiaro; come prima, in caso di errore, viene visualizzata una finestra di messaggio che informa sul problema.
C'è ancora un errore che dobbiamo gestire e che, a differenza di quelli visti finora, è un po' più difficile da identificare, perché si verifica solo in una determina situazione. Consideriamo la riga di codice
FileSelezionato = File1.Path & "" & File1.FileName
Essa salva nella variaibile FileSelezionato il nome e il percorso completo del file; per fare questo, recupera il percorso del file, vi aggiunge un back-slash ("") e, infine, inserisce il nome del file. Questa procedura funziona bene se la cartella in cui ci si trova non è quella principale del disco (quindi non è C:, A: e così via). Se invece, siamo, ad esempio, in C:, la proprietà File1.Path contiene già il back-slash, perciò, dopo l'esecuzione dell'istruzione sopra riportata la variabile FileSelezionato conterrà un valore di questo tipo: C:File.bmp. Stando così le cose, l'istruzione Image1.Picture = LoadPicture(FileSelezionato) causerà l'errore di runtime 76, cioè l'errore "impossibile trovare il percorso".
Adesso che abbiamo imparato a scrivere il codice per gestire gli errori potremmo ampliare la routine già scritta, ma in questo caso è più conveniente prevenire il problema, piuttosto che correggerlo una volta che si è verificato. L'idea che sta alla base della soluzione è questa: per evitare l'errore, dovremmo fare in modo che il back-slash venga aggiunto solo se non è già l'ultimo carattere della proprietà File1.Path. A tale scopo possiamo utilizzare la funzione Right$(<Stringa>, n), che restituisce gli ultimi n caratteri della stringa specificata. Ad esempio, l'istruzione Right$("Prova", 2) restituisce la stringa "va". Vediamo ora il codice vero e proprio:
Private Sub File1_Click()
On Error GoTo GestoreErrori
Dim FileSelezionato As String
If Right$(File1.Path, 1) = "" Then
FileSelezionato = File1.Path & File1.FileName
Else
FileSelezionato = File1.Path & "" & File1.FileName
End If
Image1.Picture = LoadPicture(FileSelezionato)
Exit Sub
GestoreErrori:
If Err.Number = 481 Then
'Immagine non valida.
MsgBox "L'immagine selezionata non è valida."
End If
End Sub
Come abbiamo anticipato, la modifica introdotta controlla se la proprietà File1.Path comprende già il back-slash come ultimo carattere e solo in caso negativo lo aggiunge alla stringa FileSelezionato.
Potete scaricare la nuova versione del visualizzatore immagini che abbiamo realizzato in questa lezione facendo clic qui.