Home Page Home Page Tips & Tricks Come creare un gestore degli Eventi per tutti i controlli creati a Runtime

Come creare un gestore degli Eventi per tutti i controlli creati a Runtime


Spesso ci capita di dovere creare a Runtime gli oggetti sia per le applicazioni Windows che per quelle Web, e la cosa non è affatto difficile basta richiamare il costruttore New dell’oggetto di cui abbiamo bisogno.
Per esempio:

VB.NET
Codice .NET n°1
Dim btn as New Button


C#
Codice .NET n°2
Button btn=new Button();


Fin qui tutto ok, il problema nasce quando dobbiamo fargli fare qualcosa, ovvero associare una nostra funzione ai vari eventi dell’oggetto appena creato.

Il metodo standard è quello di dichiarare l’oggetto con la parola chiave WhitEvents e poi usare la clausola Handles in pratica è quello che fa Visual Studio .NET quando quando si inserisce un controllo tramite il Drag&Drop dalla casella degli strumenti, infatti se date un’occhiata al codice generato, un bottone viene così definito :

VB.NET
Codice .NET n°3
Friend WithEvents Button1 As System.Windows.Forms.Button


C#
Codice .NET n°4
private System.Windows.Forms.Button button1;


E l’evento click così definito :

VB.NET
Codice .NET n°5
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub


C#
Codice .NET n°6
private void button1_Click(object sender, System.EventArgs e)
{

return;
}


Per fare tutto ciò a Runtime e creare dinamicamente un nostro gestore, dobbiamo per prima cosa definire una nostra routine

VB.NET
Codice .NET n°7
Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End sub


C#
Codice .NET n°8
private void MyButton_Click (object sender, System.EventArgs e)
{

return;
}



E’ importante che la Sub/Function definisca gli stessi parametri del metodo a cui si aggiunge l’evento.

Poi per aggiungere la nostra routine al metodo Click dobbiamo utilizzare AddHandler per specificare il nome dell’origine dell’evento e l’istruzione AddressOf per specificare il gestore dell’evento:

VB.NET
Codice .NET n°9
Dim btn as New Button
AddHandler btn.Click, AddressOff MyButton_Click


C#
Codice .NET n°10
this.btn.Click += new System.EventHandler(this.MyButton_Click);


Allo stesso modo posso utilizzare l’istruzione RemoveHandler per rimuovere la mia routine:

VB.NET
Codice .NET n°11
RemoveHandler btn.Click, AddressOf MyButton_Click


C#
Codice .NET n°12
this.btn.Click -= new System.EventHandler(this.MyButton_Click);



Conclusioni


Questo articolo può rendervi l’idea di quanto possano essere “dinamici” gli oggetti e quanto noi possiamo intervenire sulla la loro “vita” questo è la bellezza della programmazione orientata agli oggetti (Object Oriented Programmming)
Copyright © dotNetHell.it 2002-2018
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5