[C#]Gli eventi in c#

mercoledì 29 aprile 2009 - 14.08

sanfra Profilo | Junior Member

Salve, volevo capire bene gli eventi, ma non come si costruiscono da un punto di vista di sintassi, ma in un qualche esempio reale.

Cioè, perchè devo aver bisogno di creare un evento, in quale occasione potrebbe servirmi veramente, visto che in tutti i progetti che ho sviluppato fin'ora non mi è mai servito, questo che significa che non ho programmato correttamente fin'ora oppure realmente non ho avuto bisogno?


GRazie per la vostra collaborazione.

aiedail92 Profilo | Expert

Ciao

Se hai mai sviluppato applicazioni con l'interfaccia grafica sotto Windows, sicuramente gli eventi li hai usati (magari senza sapere di averlo fatto)

L'interfaccia di windows infatti è orientata agli eventi, il movimento del mouse costituisce un evento, così come la pressione di un tasto o la selezione di un oggetto in un menu... Tutti i comandi inviati dal tuo hardware vengono resi accessibili al programmatore per mezzo di eventi. Per cui in una form avrai l'evento Click per il click del mouse, MouseMove quando viene mosso e tanti altri.

Ma questo è solo un esempio, gli eventi si possono anche applicare in altri contesti. Ad esempio, se volessi crearti una classe che ti informa quando il suo contenuto viene cambiato, puoi implementare in essa un evento "Changed" e decidere di scatenarlo quando vengono chiamate determinate funzioni, quindi "intercettando" l'evento, avrai una notifica ogni volta che viene lanciato.

Spero di essere stato abbastanza chiaro, per ogni dubbio sono sempre a disposizione

Luca

sanfra Profilo | Junior Member

Ciao

e grazie ancora per avermi risposto,in effetti io programmo molto lato web, ma questo non comporta l'assenza di eventi, anche perchè la tecnologia asp.net supporta anch'essa (alla stessa maniera di applicazioni windows) gli eventi con i rispettivi delegate.
L'esempio da te posto è molto comprensibile, e l'ho già applicato questo tipo di esmepio(forse in altri casi anche di più complessi), ma quello che io chiedevo era un esempio reale, cioè in che occasione possa utilizzarlo(e per questo che ti chiedevo un link, dove porta un esempio completo ad un progettino).

Quello che voglio far capire è che ad esempio, io ho una maschera dove inserisco dei dati(txtnome,txtcognome,txtindirizzo,btninsert), e quando clicco sul pulsante (che va ad interagire con il database)mi deve apparire in una label "dato inserito correttamente",ma dopo come faccio a far capire al controllo che una volta inserito questa dicitura deve sparire;lì posso creare allora questo evento in questa classe, e per esempio ancora, fare in modo che questa classe (ce chiamo:Nominativi),la faccio ereditare da una mia classe NomeEventArgs e all'interno di quest'ultima gli assegno l'oggetto timer e dopo 1 secondo togli la scritta sopra citata.

Potrebbe essere questo un evento valido da mettere in una situazione ideale e soprattutto reale?


Grazie ancora e spero,questa volta, di essere stato io chiaro.


sanfra Profilo | Junior Member

Nessuno, mi può darmi l'ultimo chiarimento a tal proposito?


Jeremy Profilo | Guru

Ciao Francesco.
Purtroppo non è molto chiaro ciò che vuoi sapere.
Se ho capito bene tu vorresti passare un oggetto timer come proprietà di una classe EventArgs da gestire nell'evento......ma a questo punto non ti conviene gestirlo direttamente nella classe Nominativi?

Ma comunque, ripeto, probabilmente non ho capito cosa hai bisogno di sapere??
Cerca, se puoi, di essere più chiaro .... magari con qualche esempio e con un pò di codice ......

Facci sapere....
Ciao.

Revan1985 Profilo | Junior Member

ho capito cosa vuoi fare...

inserisci i dati, fai apparire la scritta "inserito correttamente", oppure "errore" e far sparire questa scritta, giusto?

facile...

potresti usare o un Thread.Sleep(1000);
ma cosi si blocca l'applicazione per un secondo...
oppure, agganci un'evento a tutti i controlli, che appena guadagnato il focus, controllano la label...
se la propietà Text è diversa da string.Empty, la setti a string.Empty...

vedi quale ti trovi meglio te....

sanfra Profilo | Junior Member

Grazie, sia per avermi capito che per avermi comunicato un possibile soluzione, infatti, essendo un'applicazione che andrà in rete,e avendo provato già il thread(come da te correttamente suggerito),mi si bloccava l'applicazione e non mi è sembrata una cosa eccezionale.

Così volevo capire meglio l'evento, se si poteva gestire,però non ho ben capito cosa vuol dire agganciare l'evento a tutti i controlli.

Mi puoi fare un esempio?

Grazie ancora del tuo aiuto.

aiedail92 Profilo | Expert

Ciao

Probabilmente la cosa più semplice sarebbe gestire l'evento TextChanged della tua TextBox e lì azzerare il Text della label che dice che i dati sono stati inseriti.

Luca

sanfra Profilo | Junior Member

si, infatti è la cosa più semplice e farò proprio così,però non ho raggiunto lo scopo.....non sono riusciuto a simulare un esempio reale con l'implementazione di un evento e di un delegate.


Grazie ancora per tutto l'aiuto.


Alla prossima

Revan1985 Profilo | Junior Member

http://www.deathlord.it/pro/sl/ricerca/tutorial.net/contents/3_CSharp/6-delegate.htm
tiè...
forse lo capisci meglio di me questo esempio
Non c'è emozione; c'è pace.
Non c'è ignoranza; c'è conoscenza.
Non c'è inquietudine; c'è serenità.
Non c'è caos; c'è armonia.
Non c'è morte; c'è la Forza.

foo Profilo | Newbie

I delegate sono una implementazione del pattern Observer definito dal GOF, ti invito a darci uno sguardo oppure qui trovi sicuramente qualche cosa:
http://c2.com/cgi/wiki?ObserverPattern

sanfra Profilo | Junior Member

Grazie, infatti ultimamente mi ero concentrato su questo pattern e mi ero reso conto che in effetti calza a pennello; pensa che stavo scrivendo un nuovo post per chiedere conferma se era corretta la mia supposizione per quanto riguarda questo pattern,


Grazie ancora
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5