Creare un Event personalizzato su un oggetto WinForms

giovedì 20 novembre 2008 - 17.59

tarabasch84 Profilo | Junior Member

Salve ragazzi,
vorrei creare un evento personalizzato che si attivi al "change" di una determinata proprietà di un oggetto. Per esempio come creare l'evento "Click" per un pulsante. Nel mio caso l'evento sarebbe "MyEvent" personalizzato :-). Come posso fare?
--
Credo che parte della colpa sia di billy...

Anonimo Profilo | Senior Member

>Salve ragazzi,

Ciao!

>vorrei creare un evento personalizzato che si attivi al "change"
>di una determinata proprietà di un oggetto. Per esempio come
>creare l'evento "Click" per un pulsante. Nel mio caso l'evento
>sarebbe "MyEvent" personalizzato :-). Come posso fare?

Ho scritto due righe di codice, spero possano esserti di aiuto:

namespace prova { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Classe classe = new Classe(); classe.myEvent += new MyEventHandler(classe_myEvent); classe.Proprietà = 5; } void classe_myEvent(object sender, MyEventArgs e) { MessageBox.Show(e.Testo); } } //Dichiari il tipo di delegato con nome e tipo di parametri public delegate void MyEventHandler(object sender, MyEventArgs e); //Dichiari la tua classe che deriva da EventArgs e ci metti le proprietà che ti servono public class MyEventArgs : EventArgs { String _testo; public String Testo { get { return _testo; } set { _testo = value; } } public MyEventArgs(String testo) { this._testo = testo; } } class Classe { //Dichiari l'evento public event MyEventHandler myEvent = null; int _proprietà; public int Proprietà { get { return _proprietà; } //al momento del set richiami l'evento set { _proprietà = value; onMyEvent(); } } private void onMyEvent() { if (myEvent != null) { //Istanzi la classe MyEventArgs con i parametri che ti servono myEvent(this, new MyEventArgs("ciao")); } } } }

Se hai bisogno di altri chiarimenti chiedi pure


Riccardo

tarabasch84 Profilo | Junior Member

Ciao ricky,
sul termine "oggetto" che ho utilizzato nella richiesta non sono stato molto chiaro. Per oggetto intendo un controllo WinForms(es. TextBox). Cerco di essere un pochettino più specifico. In pratica ho la necessità di gestire il "change" della proprietà "Child" di un "Border" (ti parlo del WPF, la logica di programmazione è uguale). Immagina di creare l'evento TextChanged di una TextBox sulla proprietà Text, solo che la TextBox e la proprietà Text sono già state dichiarate e tu ci devi implemetare il TextChanged. Come posso risolvere?
Ciao e grazie
--
Credo che parte della colpa sia di billy...

aiedail92 Profilo | Expert

Ciao

Nel tuo caso puoi creare una classe derivata da Border, ed eseguire in questa l'override della proprietà Child. Qui, nel set della proprietà, scriverai il codice per la generazione dell'evento:

class MyBorder : Border { //L'evento generato dopo che il child è stato modificato public event EventHandler ChildChanged; protected void OnChildChanged(EventArgs e) { //Se l'evento è stato "agganciato" lo genera if (ChildChanged != null) { ChildChanged(this, e); } } public override UIElement Child { get { //Get resta invariato return base.Child; } set { //Nel set, dopo aver impostato il nuovo valore, //avvia il sollevamento dell'evento base.Child = value; OnChildChanged(EventArgs.Empty); } } }

Luca

tarabasch84 Profilo | Junior Member

Ciao Luca, è esattamente quello che cercavo.
Ciao e grazie.
--
Credo che parte della colpa sia di billy...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5