Mas EVENTOS

28/10/2003 - 20:37 por mickro | Informe spam
No entiendo las ultimas lineas: Que son esos parametros que se les pasa
cuando de invoca al evento Changed (this, e)?


namespace MyCollections

{

using System.Collections;

public delegate void ChangedEventHandler(object sender, EventArgs e);

public class ListWithChangedEvent : ArrayList

{

public event ChangedEventHandler Changed;

protected virtual void OnChanged(EventArgs e)

{

if (Changed != null)

Changed(this, e);

}

Preguntas similare

Leer las respuestas

#1 Juan Cristóbal Olivares C.
28/10/2003 - 21:33 | Informe spam
Changed representa al manejador de eventos (event handler). Por ejemplo,
desde el cliente podremos agegar esto:

control.Changed += new EventHandler (haceralgo);

Luego, cuando algo cambie en el control, o cuando un control heredado de
este llame a OnChanged(), el control verifica que exista algún event handler
disponible

if (Changed != null)

y si existe alguno, lo ejecuta:

Changed ();

Atte,
Juan C. Olivares
www.juancri.com

"mickro" escribió en el mensaje
news:%
No entiendo las ultimas lineas: Que son esos parametros que se les pasa
cuando de invoca al evento Changed (this, e)?


namespace MyCollections

{

using System.Collections;

public delegate void ChangedEventHandler(object sender, EventArgs e);

public class ListWithChangedEvent : ArrayList

{

public event ChangedEventHandler Changed;

protected virtual void OnChanged(EventArgs e)

{

if (Changed != null)

Changed(this, e);

}






Respuesta Responder a este mensaje
#2 Tristan
28/10/2003 - 22:06 | Informe spam
Tal y como te decía en otro mensaje, el primer parámetro es el sender del
evento. En este caso this, es decir, la propia instancia sobre la que se ha
llamado al OnChanged(). El segundo parámetro, e, es el parámetro que se ha
pasado al método OnChanged(). Este es el esquema típico de manejo de eventos
en el framework. Además del propio evento, hay un método con el mismo nombre
que el evento pero con prefijo On.

La utilidad de tener un evento Changed, y un método OnChanged, es que es
sencillo para una clase heredera sobreescribir el tratamiento del evento. Si
te fijas OnChanged() está declarado como virtual, de forma que puede
sobreescribirse en clases herederas. Si en la clase heredera se considera
conveniente ejecutar el delegado del evento, basta con que haga:

protected override void OnChanged(EventArgs e)
{
// Lo que se necesite para procesar el evento
base.OnChanged(e)
}

Si por el contrario, se desea que la heredera no ejecute los delegados
asociados al evento, basta con no incluir la última linea.

De todas formas, eso no tiene nada que ver con manejar eventos, sino con la
forma en que MS ha organizado su libreria de clases.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#3 Tristan
28/10/2003 - 22:32 | Informe spam
Creo qe ya se lo que buscas realmente. Saber como trabajar con eventos
propios, ¿no?

Si es eso, no necesitas tanta complicación como la de las clases del
framework. Al menos no al principo. Creo que te puede valer un ejemplo más
sencillo:

// El delegado es el patrón que debe seguir el método del evento
public delegate void Delegado(string mensaje);

class ClaseConEvento
{
public event Delegado Evento;

public void DisparaEvento()
{
Evento("Disparando el evento");
}
}


Incluye en tu form un botón, añade este código, y enlaza button1_Click al
evento click de ese botón.

private void button1_Click(object sender, System.EventArgs e)
{
ClaseConEvento o = new ClaseConEvento();
o.Evento += new Delegado(ProcesaEvento);
o.DisparaEvento();
}

private void ProcesaEvento(string mensaje)
{
MessageBox.Show(mensaje);
}

Espero sirva para aclarar dudas.

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida