programmazione

         EVENTI in VB.NET
       Come creare eventi personalizzati in Visual Basic NET.

home page
 

EVENTI

Pubblicato il: 25-3-2019

Ultima Modifica: 14-12-2024

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.

App Windows

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)

Form

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.

codice

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.

eventi

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