In VB.NET la programmazione viene
definita ad eventi, nel suo ambiente di sviluppo si hanno a
disposizione un nutrito numero di controlli, dei quali la
maggior parte sono visivi, cioè si possono selezionare e
trascinare sulla Form principale che viene automaticamente
creata all'avvio di un nuovo progetto, la Form principale stessa
è a tutti gli effetti un controllo. Si hanno a disposizione ad
esempio caselle di testo, pulsanti, bottoni, menù a discesa e
tanti altri. Ognuno di questi controlli contiene
numerose proprietà, funzioni e sub che servono a manipolare il
controllo, oltre a questo contengono anche un certo numero di
eventi che quando vengono selezionati servono ad inserire codice
che verrà eseguito al verificarsi di certi eventi, ad esempio il
controllo Form contiene diverse decine di eventi del quale uno
dei più semplici è l'evento che si verifica quando viene fatto
clic sul Form, un'altro si verifica quando viene fatto doppio
clic sul Form, un'altro ancora quando il puntatore del mouse
viene spostato sul Form oppure un altro quando il puntatore del
mouse esce dal Form e così via.
Tutti questi eventi sono già pronti per
essere usati, ma se abbiamo bisogno di un evento particolare che
non è disponibile dobbiamo crearlo da soli, tutto questo è
possibile ed anche nemmeno troppo complicato, vediamo quindi di
seguito come è possibile procedere.
Per creare un evento personalizzato sono
necessarie tre parole chiave che sono
Event
che serve a dichiarare l'evento che può essere
creato all'interno di una classe, di una struttura, di un modulo o di una
interfaccia, l'altra parola chiave è RaiseEvent() che si utilizza per generare l'evento, ed
infine la parola chiave WithEvents
che serve a dichiarare una variabile del tipo della classe che
contiene l'evento come variabile che utilizza eventi.
Apriamo allora Visual Studio e
selezioniamo Crea nuovo progetto, dalla
finestra Nuovo progetto che si apre
selezioniamo nel menù a sinistra Windows Desktop,
e nella finestra centrale selezioniamo App Windows Form (.Net
Framework), come si può vedere
nella foto sotto, lasciamo il nome del progetto di
default e clicchiamo su Ok.
Il nuovo progetto viene creato, secondo l'impostazione del mio
ambiente di sviluppo trovo a sinistra la casella degli
strumenti, al centro trovo la finestra del Form,
e alla destra in alto trovo Esplora Soluzioni
ed infine sotto trovo la Casella delle Proprietà.
Adesso apro la voce Progetto dal menù
principale dell'ambiente di sviluppo e quindi seleziono
Aggiungi classe... si apre la finestra di
Aggiungi nuovo elemento, lascio tutto quello che è già
selezionato di default e clicco sul pulsante Aggiungi.
Adesso dico subito che voglio creare una classe con due
proprietà una sub e un evento, la prima proprietà dovrà
contenere un numero che sarà il dividendo e la seconda invece
sarà il divisore, quando la divisione tra questi due numeri
che sarà eseguita nella sub darà un risultato senza resto verrà
eseguito il codice contenuto nell'evento che informa che il
dividendo è divisibile per il divisore.
Adesso aggiungere il codice sotto in Public Class Class1
Public Class Class1
Private _dividendo As Integer
Private _divisore As Integer
Public Event Evento1()
Public Property Dividendo As Integer
Set(value As Integer)
_dividendo = value
End Set
Get
Return _dividendo
End Get
End Property
Public Property Divisore As Integer
Set(value As Integer)
_divisore = value
End Set
Get
Return
_divisore
End Get
End Property
Public Sub Dividi()
Dim a1, a2 As Integer
If IsNumeric(Dividendo) And IsNumeric(Divisore) And
Dividendo >= Divisore And Divisore <> 0 Then
a1 = Dividendo \ Divisore
a2 = Dividendo Mod Divisore
If a2 =
0 Then
RaiseEvent Evento1()
End If
End If
End Sub
End Class
Adesso come è possibile vedere
dall'immagine sotto passo alla finestra del Form e inserisco i
controlli necessari che sono due TextBox per inserire dividendo
e divisore corredate da due controlli Label che descrivono il
contenuto che dovrà essere inserito, poi un controllo Button che
quando verrà cliccato scriverà sul TextBox sottostante il
risultato, quindi eseguirà la Sub Dividi della variabile del
tipo della classe appena creata che a sua volta se troverà che
il resto della divisione è uguale a zero eseguirà l'evento
(sempre che sia stato inserito codice al suo interno)
E arrivato il momento di inserire un pò
di codice, a questo proposito faccio doppio clic sul pulsante
Dividi, l'ambiente mi apre la pagina del codice e inserisce
automaticamente la dichiarazione della sub per l'evento clic del
Button all'interno del quale potrà essere inserito codice che
verrà eseguito quando vi verrà fatto clic, questo sotto è il
codice che vi ho inserito.
Nelle prime due righe dichiaro quattro
variabili locali di tipo integer più un'altra variabile di tipo
stringa, poi subito sotto controllo con una istruzione if se il
dividendo e il divisore inseriti sono valori numerici e se il
dividendo è uguale o maggiore del divisore e infine se il
divisore è diverso da zero (una divisione per zero darebbe un
errore). In caso affermativo nelle istruzioni successive prima
assegno i valori alle variabili locali e poi eseguo la divisione
intera e l'istruzione che assegna il resto della divisione
intera, successivamente creo la stringa che inserirò nel TextBox
che visualizza il risultato.
A questo punto è arrivato il momento di
inserire subito sotto la prima riga di codice del documento la
dichiarazione di una variabile del tipo della classe creata in
precedenza preceduta dall'istruzione WithEvents
che inoltre informa il compilatore che si tratta di una
variabile che contiene anche eventi, vediamo adesso sotto di
nuovo il listato completo fino a questo momento.
Il codice è praticamente lo stesso
dell'immagine precedente tranne che per la prima riga sotto la
dichiarazione della classe.
Adesso se si clicca in alto sopra la casella che contiene il
nome della classe Form1 la casella si espanderà e mostrerà tutti
gli oggetti presenti nel Form compresa la variabile di tipo
Class1 appena dichiarata, basterà selezionare questa variabile
che nella casella alla sua destra sarà possibile vedere
cliccandoci sopra i suoi eventi, in questo caso vedremo l'unico
evento creato Evento1, selezionandolo il
compilatore creerà automaticamente all'interno della classe
Form1 la dichiarazione della sub che sarà eseguita quando la
divisione darà resto zero.
Al suo interno inserisco un'unica riga che visualizzerà un
messaggio che informa che la divisione ha dato resto zero. Quì
sotto è possibile vedere il listato completo al quale però ho
dovuto aggiungere alcune altre righe di codice visualizzate in
rosso rispettivamente per assegnare i valori alle proprietà
della classe e per eseguire la sub Dividi() della classe.
Public Class Form1
WithEvents VarClass As New Class1
Private Sub Button1_Click(sender As Object, e As EventArgs)
Handles Button1.Click
Dim a1, a2, a3, a4 As Integer
Dim stringa As String
If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) And Val
_(TextBox1.Text) >= Val(TextBox2.Text) And Val(TextBox2.Text) <>
0 Then
a1 = Val(TextBox1.Text)
VarClass.Dividendo = a1
a2 = Val(TextBox2.Text)
VarClass.Divisore = a2
a3 = a1 \ a2
a4 = a1 Mod a2
stringa = Str(a3) & " " & "con resto di " & Str(a4)
TextBox3.Text = stringa
VarClass.Dividi()
End If
End Sub
Private Sub VarClass_Evento1() Handles VarClass.Evento1
MsgBox("Questa divisione ha dato resto zero.")
End Sub
End Class
|