Introduzione
MS
Visual Basic è nato dalla necessità di dare ai numerosi
programmatori BASIC per MS-Dos, uno strumento di sviluppo facile ed intuitivo
per creare applicazioni in ambiente Microsoft Windows.
Visual Basic
consente di creare senza troppo sforzo delle applicazioni con interfaccia utente
grafica secondo lo stile di tutte le applicazioni per WindowsÖ, è un
generatore di applicazioni in ambiente completamente grafico.
Potete
disegnare le finestre, aggiungere tutti gli altri elementi dell'interfaccia
semplicemente trascinandoli da una finestra di strumenti sulla finestra creata,
tramite le finestre "proprietà" è possibile stabilire il
comportamento degli oggetti che avete disegnato ed il loro aspetto, e finalmente
potete scrivere del codice per gestire gli eventi generati
dall'utente.
L'applicazione Visual Basic
Un applicazione Visual Basic è costituita
da uno o più "form", che corrispondono alle finestre utilizzate
nell'applicazione, da uno o più file di codice Basic che contengono
procedure generali che verranno, da uno o più controlli personalizzati
(OCX, VBX) o standard e da un file di risorse, tipicamente usato per le
localizzazioni del programma nelle varie lingue.
Le applicazioni Visual
Basic si differenziano dalle applicazioni tradizionali per essere guidate dagli
eventi ("event driven"). Le applicazioni tradizionali sono dette "procedurali"
in quanto iniziano l'esecuzione dalla prima linea di codice, e proseguono fino
all'ultima seguendo uno schema imposto da chi ha scritto il
programma.
Nelle applicazioni guidate dagli eventi sono gli eventi generati
dall'utente o dal sistema a determinare la sequenza delle procedure che verranno
eseguite.
Gli eventi possono essere generati contemporaneamente ad
altri eventi ad esempio l'evento "doppio-click" è generato assieme agli
eventi "mousedown", "mouseup" e "click".
Siccome il programma non sa "a
priori" in che situazione verrà generato un particolare evento, il
programmatore dovrà fare in modo di abilitare o disabilitare certe
possibilità in considerazione delle condizioni al contorno. Facciamo un
esempio pratico:
Supponiamo che il vostro programma sia costituito da un
finestra contenente 2 caselle in cui l'utente potrà scrivere dei numeri e
da un bottone che, se premuto, eseguirà la divisione dei due numeri e
comunicherà il risultato. È chiaro che se i due numeri non sono
ancora stati scritti è inutile che l'utente prema il bottone "dividi",
per evitare questo il vostro programma abiliterà il bottone "dividi" solo
se ambedue le caselle testo conterranno dei numeri, altrimenti rimarrà
disabilitato.
Uso delle variabili
Spesso è necessario tenere traccia di
alcuni valori temporaneamente per poter fare in seguito delle operazioni o dei
confronti, a questo scopo si usano le variabili. In Visual Basic così
come in molti altri linguaggi di programmazione, le variabili hanno un nome,
dato dal programmatore ed usato nel programma per riferirisi a quel dato, e un
tipo, per identificare che tipo di dato è contenuto in quella
variabile.
In Visual Basic non è necessario dichiarare
esplicitamente una variabile, ma è consigliabile per avere meno problemi
durante il debugging (fase della programmazione in cui si correggono gli errori
di funzionamento). Per dichiarare una variabile si usa l'istruzione Dim
nome_variabile as Tipo.
Le variabili dichiarate all'interno di una
procedura esistono solamente durante l'esecuzione di quella procedura. Le
variabili dichiarate a livello di form, di modulo o di classe valgono per tutte
le procedure esistenti in quel modulo. Le variabili dichiarate "public" valgono
per l'intera applicazione, mentre quelle dichiarate "statiche" (static)
all'interno di una procedura mantengono il loro valore tra una chiamata della
procedura e la successiva.
I tipi di dati
In Visual Basic una variabile di cui non è
stato definito esplicitamente il tipo è di tipo "Variant", queste
variabili possono contenere qualsiasi tipo di dati, array, stringhe, numeri
interi o reali, date, quando assegnate uno di questi oggetti a una variabile di
tipo Variant non dovete preoccuparvi di fare nessuna conversione, ci pensa
Visual Basic a farle per voi.
Gli altri tipi di dati gestiti da Visual
Basic sono:
Integer
per contenere numeri interi tra -32768 e +
32767
Long
per contenere numeri interi tra -2.147.483.648 e +
-2.147.483.647
Single
per contenere numeri reali a precisione
singola
Double
per contenere numeri reali a precisione
doppia
Currency
per contenere numeri reali compresi tra
-922.337.203.685.477,5808 e + 922.337.203.685.477.5808
Byte
Da 0
a 255
String
1 byte per carattere fino a circa 65000 caratteri
su OS a 16 Bit
Boolean
Vero o Falso
Date
Da 1
Gennaio 100 al 31 Dicembre 9999
Object
Riferimenti ad
oggetti
Variant
Ogni tipo precedente
Nella
dichiarazione delle variabili potete definire sulla stessa riga variabili di
tipo diverso ad esempio:
Dim i as integer, l as long, nome as
String
In Visual Basic è possibile usare dei simboli per indicare il
tipo della variabile senza dichiararlo in maniera esplicita così la
dichiarazione precedente può anche essere scritta in questo
modo:
Dim i%, l&, nome$
Gli Array
Gli array sono delle collezioni di variabili dello
stesso tipo a cui è possibile accedere attraverso un unico nome e un
indice, permettendovi così di scrivere del codice più ottimizzato.
Gli array possono essere di dimensione fissa o variabile. Per dichiarare un
variabile di tipo array di dimensione fissa si usa la seguente
istruzione:
1 Dim nome_var(N) as Tipo
2 Dim nome_Var(L To U) as
Tipo
3 Dim vettore(20) as integer
4 Dim vettore(10 To 20) as
integer
Con l'esempio di riga 1 e 3 si definiscono array di N+1
elementi con l'indice dell'array che può variare tra 0 e N. Nell'esempio
di riga 2 e 4 si definiscono array di (U-L+1) elementi con l'indice dell'array
che varia tra L (limite inferiore) e U (limite superiore).
È
anche possibile definire array che contengono array di tipo diverso, dichiarando
un array di tipo Variant e poi assegnando ad ogni elemento dell'array
principale, array di vari tipi.
Gli array possono anche essere
multidimensionali, vediamo un esempio di matrice con il codice necessario per
inizializzare i suoi elementi ad un valore prestabilito (nel ns. caso
100):
Dim Matrice(1 To 10, 1 To 10) as Integer
Dim I as integer,
J as Integer
For I=1 to 10
For J = 1 to 10
Matrice(I, J) =
100
Next J
Next I
È necessario prestare molta
attenzione nell'uso di array multidimensionali perché usano moltissima
memoria, ad esempio la matrice dell'esempio precedente contiene 10 x 10
elementi.
Se non si conosce a priori il numero di elementi che ci
serviranno è possibile usare degli array a dimensione variabile, per fare
questo è necessario dichiarare l'array senza specificarne la dimensione e
quindi usare l'istruzione ReDim per dimensionarlo quando serve.
Es: Dim
Vettore() as integer
Redim Vettore(1 To X+1) as Integer
Con
l'istruzione Redim è possibile cambiare il numero di elementi di un array
ma non il numero delle dimensioni. In seguito a un ridimensionamento un array
normalmente perde tutti i valori che conteneva, per fare in modo che li conservi
è necessario far seguire la parola Preserve all'istruzione
Redim.
Tipi definiti dall'utente
È ovviamente possibile definirsi dei propri
tipi di dati, per far questo si usa l'istruzione Type.
Type
NomeTipo
elemento1 as Tipo
elemento2 as Tipo
....
end
Type
Se per esempio volessimo definire il Tipo Libro per fare un
programma di gestione della nostra biblioteca potremmo definirlo in questo
modo:
Type Libro
Titolo as String
Autore as
String
N_Pag as Integer
Data_Pubb as Date
Stato as
Integer
Letto as Boolean
end Type
Per dichiarare una
variabile di tipo definito dall'utente si procede nel modo
usuale:
Dim Miolibro as Libro
Per accedere agli elementi
del tipo Libro si usa la notazione "NuovoTipo.Elemento1" così per
assegnare il titolo alla variabile MioLibro dovrò
scrivere:
Miolibro.Titolo = "I Promessi Sposi"
I Moduli
In Visual Basic esistono tre tipi di moduli: form,
moduli standard e class.
Il modulo Form contiene tutte le informazioni
sull'aspetto grafico della finestra, le proprietà dei suoi elementi, e il
codice di gestione degli eventi di sua pertinenza. Un'applicazione molto
semplice può essere costituita da un solo Form.
Talvolta, quando le
applicazioni diventano più complesse si potrebbe avere la
necessità di usare lo stesso codice in form diversi, per evitare di
duplicare il codice, è possibile scrivere la procedura richiamata dai
vari form in un modulo di tipo "standard", che sono utilizzati proprio per
questo scopo, contenere procedure di uso generale.
I moduli di tipo "class"
servono per creare nuovi oggetti, e permettono di realizzare la parte "object
oriented" di Visual Basic. I nuovi oggetti possono avere metodi e
proprietà definiti da voi ma non possono gestire nuovi eventi. Questi
oggetti possono essere usati da tutti gli altri moduli
dell'applicazione.
Uso delle Procedure
Quando si scrive un programma è buona
abitudine dividere l'applicazioni in tante piccole unità logiche che
realizzano l'obbiettivo finale. Queste piccole unità prendono il nome di
procedure e sono usate con lo scopo di essere utilizzate in diverse parti del
programma e per essere più facilmente manutenute. Visual Basic mette a
disposizione due tipi di procedure: Sub e Function.
Sub
Le Sub sono procedure che accettano parametri in
ingresso ma non restituiscono nessun valore.
Sintassi:
Sub
NomeProcedura(argomenti)
istruzioni
End
Sub
Esempio:
Sub ColoreBlu (textc as
Control)
textc.Forecolor = RGB(0,0,255)
end Sub
Quando una
procedura viene chiamata, vengono eseguite le istruzioni comprese tra
l'istruzione Sub e l'istruzione End Sub, gli argomenti passati possono cambiare
valore.
Per chiamare una procedura di tipo Sub la sintassi
è:
NomeProcedura lista_dei_parametri
Es:
ColoreBlu
Divisione.Dividendo
ColoreBlu Divisione.Divisore
È
possibile passare variabili ad una procedura in due modi, per valore (By value)
o per riferimento (By Ref), se non specificato Visual Basic assume che i
parametri siano passati per riferimento.
I parametri passati per
riferimento possono cambiare il loro valore all'interno della procedura e questo
cambiamento si riperquotera' anche sulle procedure chiamanti; nel caso di
variabile passate per valore, il contenuto della variabile puo' cambiare
all'interno della procedura, ma all'uscita della procedura la variabile
continuera' ad avere il suo valore iniziale.
Function
Le function si differenziano dalle Sub perche'
ritornano un valore. Si dichiarano in questo modo:
Function
Nome_funzione(argomenti) as Tipo
istruzioni
End
Function
Per esempio se dovete scrivere una procedura che restituisca
l'area del cerchio, noto il raggio, potete fare così:
Function
AreaCerchio(r as Single) as Single
Dim A as Single
A = 3.14 *
r^2
AreaCerchio = A
End Function
Le funzioni possono essere
usate in istruzioni complesse e si comportano esattamente come le funzioni
Built-in di Visual Basic come Sqr (Radice Quadrata), oppure Abs (Valore
assoluto); ad esempio la funzione dell'esempio precedente può essere
usata in questo modo :
SupTot = 2*AreaCerchio( r ) +
PerimetroCerchio( r) * h
Strutture di controllo
Se non ci fossero strutture di controllo un
programma sarebbe eseguito seguendo le istruzioni da destra verso sinistra e
dall'alto verso in basso, ma in questo modo si potrebbero scrivere solo
programmi molto semplici. Visual Basic mette a disposizioni diverse strutture di
controllo.
Strutture di controllo decisionali
Tra le strutture di
controllo più utili possiamo senz'altro annoverare la struttura IF in
tutte le sue variazioni.
1) If condizione then
istruzione
2) If condizione
then
istruzioni
else
istruzioni
end if
3) If
condizione1 then
istruzioni
elseif condizione2
then
istruzioni
elseif condizione3
then
istruzioni
.....
else
istruzioni
end
if
Condizione di solito è un confronto tra valori, se la
condizione è vera allora vengono eseguite le istruzioni che seguono la
parola Then , altrimenti verranno eseguite le istruzioni che seguono la parola
Else.
Nel caso 3 viene dapprima testata la condizione1 se non è
vera viene testata la condizione2 e così via fino a che non viene trovata
una condizione vera, a quel punto verranno eseguite le istruzioni seguenti la
parola then , se nessuna condizione è vera verranno eseguite le
istruzioni seguenti la parola "else" se presenti.
Vediamo un esempio
:
If saldo 0 then
MsgBox "Attenzione, il vostro conto è in
rosso!"
end if
A volte se l'espressione da testare è
sempre la stessa è più comodo usare un'istruzione di tipo
Select.
Select Case (espressione_test)
Case (lista di
espressioni)
istruzioni
Case (lista di
espressioni)
istruzioni
Case (lista di
espressioni)
istruzioni
Case Else
istruzioni
end
Select
Visual Basic valuta una volta all'inizio l'espressione quindi
confronta il risultato con quelli che seguono la parola Case, se trova un valore
uguale, esegue le istruzioni che seguono quel Case altrimenti esegue le
istruzioni che seguono le parole Case Else.
Nel prossimo esempio, vedrete
una funzione che viene chiamata quando l'utente seleziona un item del menu
File(index), in funzione dell'elemento scelto la funzione eseguirà la
procedura adatta.
Es:Private Sub MenuFile_Click(index as
integer)
Select Case ( Index)
Case OPEN_FILE
ApriFile
Case
SAVE_FILE
SalvaFile
Case QUIT
Esci
end Select
end
Sub
CICLI
Visual Basic dispone di diversi tipi di loop che
vedremo in dettaglio:
For contatore = inizio To Fine Step
incremento
istruzioni
Next var
L'istruzione For viene usata
quando si conosce esattamente il numero di volte che un'istruzione deve essere
eseguita, ad esempio per leggere gli elementi di un array di dimensione
conosciuta. Le variabili contatore, inizio, fine e incremento assumono valori
interi, l'istruzione Step incremento è facoltativa ed in sua mancanza si
assume un incremento positivo di una unità. Cosa succede quando Visual
Basic esegue un'istruzione For? Vediamolo in dettaglio:
1. assegna alla
variabile contatore il valore Inizio
2. Verifica se contatore è
maggiore di Fine
3. Se non lo è esegue le istruzioni fino alla
parola next
4. incrementa la variabile contatore di 1 (o di
incremento)
5. ripete i passi 2-4 fino a che contatore non diventa maggiore
di Fine
Es:
Sub StampaVettore (X() as integer, N as
integer)
Dim i as integer
For i=0 to N
Print "Elemento" & i
& " =" & X(i)
Next i
End Sub
Quando non è noto il
numero di volte che le istruzioni devono essere eseguite è preferibile
usare un ciclo Do While
DO While
Condizione
istruzioni
LOOP
Se condizione è vera
vengono eseguite le istruzioni fino alla parola LOOP, se è falsa le
istruzioni vengono saltate e il programma prosegue sulla riga successiva alla
parola LOOP. Le istruzioni comprese tra la riga DO While e la riga LOOP vengono
eseguite fintanto che condizione rimane vera. Al fine di evitare cicli infiniti
è bene accertarsi che all'interno delle istruzioni comprese nel ciclo ci
sia anche quella che fa diventare falsa la Condizione.
Una variazione del
cilco precedente è l'istruzione:
Do
istruzioni
While Loop
Condizione
In questo caso la Condizione è testata dopo aver eseguito
almeno una volta il ciclo.
Nel prossimo esempio, vedremo l'utilizzo
dell'istruzione Do While per calcolare il Fattoriale di un
numero.
Function Fattoriale( x as integer)
Dim result as
Double
if (x = 0 ) then
Fattoriale = 1
else
result =
1
Do while x > 1
result = result*x
x=
x-1
Loop
Fattoriale = result
end if
end
Function
Esistono due ulteriori variazioni del ciclo Do Loop e
sono
Do Until Condizione Do
Istruzioni Istruzioni
Loop Loop
Until Condizioni
Si differenziano dai precedenti perché
restano nel ciclo fino a che la condizione rimane falsa.
Come avete
potuto vedere nell'esempio del Fattoriale le strutture di controllo possono
essere innestate. Ciascuna istruzione di chiusura di un ciclo, chiude il ciclo
corrispondente immediatamente precedente.
È anche possibile forzare
l'uscita da un ciclo con l'istruzione Exit For o Exit Do, di solito si ricorre a
queste istruzioni con l'intento di ottimizzare le prestazioni del codice e
solitamente sono conseguenti alla verifica di una condizione; infatti al
verificarsi di una certa condizione, che viene testata, può essere
inutile continuare il ciclo.
Così come è possibile uscire da
un ciclo con l'istruzione Exit è anche possibile uscire da una Sub o da
una Function con le istruzioni Exit Sub e Exit Function, anche in questo caso,
se la procedura ha fatto quel che doveva fare è possibile farla uscire
immediatamente.
Controlli
Visual Basic mette a disposizione, numerosi
controlli che consentono di realizzare interfacce utente gradevoli e funzionali.
Descrivere il funzionamento di ciscun controllo va oltre le finalita' di questo
capitolo, vedremo solo i principali e qual'è il loro utilizzo. Ogni
controllo ha delle proprietà (Fonte, colore di sfondo, posizione,
larghezza, altezza...), risponde a degli eventi (click del mouse, spostamento
del mouse, ridimensionamento, attivazione, disattivazione ...) ed è
possibile applicargli dei Metodi (Aggiungi (AddItem), Togli (RemoveItem),
Rendilo attivo(SetFocus)).
TextBox (Casella Testo)
Controllo
che permette all'utente di inserire dei dati, è possibile modificare il
carattere, lo stile e la dimensione, scegliere il colore di sfondo e quello di
scrittura.
Label (Etichette)
È come il TextBox solo che
serve solo per visualizzare delle informazioni, l'utente non puo'
modificarlo.
Command Button (Pulsanti )
È il tipico pulsante
dell'ambiente Windows, può essere attivo o non attivo, ha un'etichetta e
può avere un'icona. Viene usato per consentire all'utente di avviare
determinate funzioni. È buona norma dare un'etichetta al bottone che sia
significativa di quello che succederà quando viene premuto.
In
questa figura le caselline a sfondo bianco sono TextBox, le scritte nere su
fondo azzurro sono Label e il rettangolo grigio con scritta Dividi è un
Command Button.
Check Box e Radio Button
Il controllo CheckBox
è costituito da una casella nella quale viene visualizzata una x quando
il controllo viene selezionato, la x scompare nel momento in cui la casella
viene deselezionata. Un insieme di controlli CheckBox consentono all'utente di
selezionare alcune delle opzioni disponibili.
Il controllo radio Button
è costituito da un piccolo cerchio nel quale viene visualizzato un
puntino quando è selezionato, il puntino scompare sulla deselezione. I
controlli radio button consentono all'utente di scegliere tra opzioni tra di
loro alternative.
I check box consentono di scegliere quali opzioni
installare sulla propria macchina, mentre i radio botton permettono di scegliere
il tipo di cambio.
ListBox (Casella di Riepilogo)
È un controllo che permette di visualizzare
un elenco eventualmente scrollabile di elementi, su una o piu' colonne. Nella
foto che segue potete vederne un esempio. Sulla Lista sono disponibili vari
metodi tra cui AddItem (per aggiungere un elemento), RemoveItem (per togliere un
elemento), Clear (per azzerare il contenuto della Lista) e diverse Proprieta'
tra cui Sorted (per abilitare o disabilitare l'ordinamento), ListCount (per
conoscere quanti elementi ci sono), ListIndex per sapere qual'è
l'elemento corrente.
Combo Box (Casella Combinata)
La casella combinata assomiglia alla casella di
controllo ma visualizza solo l'elemento corrente, gli altri elementi sono
visualizzati solo premendo sull'apposito pulsante (freccia) che fa comparire un
menu contenente l'elenco degli elementi. Rilasciando il mouse su uno degli
elementi, il menu scompare e quell'elemento viene visualizzato nella
casella.
Grid (Griglia)
È un controllo che consente di visualizzare
elementi con aspetto tabellare. È il tipico aspetto dei Fogli
elettronici, oppure viene usato per visualizzare i record di un database.
È possibile impostare in fase di disegno o di esecuzione il numero di
righe e di colonne con le proprieta' Rows e Cols, l'intersezione tra una riga ed
una colonna costituisce una cella. Una cella puo' contenere del testo o
un'immagine, ed è possibile leggere o impostare il suo contenuto durante
l'esecuzione del programma. I metodi AddItem e RemoveItem consentono di
aggiungere o togliere righe alla griglia, nelle posizioni
specificate.
Distribuzione delle Applicazioni
Quando avete realizzato il vostro eseguibile, per
poter funzionare su altri computer, esso ha bisogno di un certo numero di file
accessori, che possono variare a seconda del tipo di controlli che avete usato.
Per aiutare il programmatore a realizzare i dischetti necessari
all'installazione del programma Visual Basic mette a disposizione un programma
detto "Autocomposizione Installazione", il quale dopo avergli indicato il
progetto di cui volete creare i dischetti, esamina il programma, decide quali
sono i file necessari, vi chiede se volete aggiungere altri file che possono
essere richiesti, e quindi crea il programma di installazione ed i
dischetti.