Eventos en Colección

22/10/2007 - 12:00 por Plextor | Informe spam
Hola, agradecería que alguien me echase un cable:

Tengo una clase (A) que controla diversos dispositivos. Para ello, ésta
clase A, tiene una instancia de una colección de objetos (D).

Según una lógica de funcionamiento, voy accediendo a los diferentes
objetos de la colección (dispositivos) y cambiando propiedades de ellos,
los cuales según programación pueden generar un evento que debería ser
capturado por la clase A.

Resumiendo: Como puedo generar una colección de objetos, los cuales
pueden enviar un evento a la clase instanciadora. Todo ello (claro está)
sin crear un delegado nuevo para cada uno de los objetos de la colección.

Un saludo, y perdón por el ladrillo
Plextor

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
22/10/2007 - 12:11 | Informe spam
"Plextor" wrote in message
news:
Tengo una clase (A) que controla diversos dispositivos. Para ello, ésta
clase A, tiene una instancia de una colección de objetos (D).

Según una lógica de funcionamiento, voy accediendo a los diferentes
objetos de la colección (dispositivos) y cambiando propiedades de ellos,
los cuales según programación pueden generar un evento que debería ser
capturado por la clase A.

Resumiendo: Como puedo generar una colección de objetos, los cuales pueden
enviar un evento a la clase instanciadora. Todo ello (claro está) sin
crear un delegado nuevo para cada uno de los objetos de la colección.



Se puede crear un tipo único de delegado para todos los objetos. Cada uno
de ellos declara un evento del tipo de ese delegado. La clase A, al ir
agregando elementos a la colección, va conectando el evento de cada uno de
ellos a un método común dentro de la clase. Dentro de dicho evento, se puede
saber cuál de los elementos de la colección lo disparó gracias al parámetro
"sender".

public delegate void MiTipoDeDelegado(object sender, EventArgs e);
...
public class D
{
public event MiTipoDeDelegado MiEvento;
...
protected void DispararElEvento()
{
if (MiEvento!=null) MiEvento(this, EventArgs.Empty);
}
}
...
public class A
{
List<D> coleccion = new List<D>;
...
public void CargarColeccion()
{
for (..)
{
D elemento = new D();
D.MiEvento += new MiTipoDeDelegado(MiRutina);
coleccion.Add(elemento);
}
}
...
public void MiRutina(object sender, EventArgs e)
{
//El remitente del evento es (D)sender;
}
}
Respuesta Responder a este mensaje
#2 Plextor
22/10/2007 - 12:28 | Informe spam
Gracias Alberto, Tan sencillo y no había caido en ello.

Un saludo,
Plextor

Alberto Poblacion escribió:
"Plextor" wrote in message
news:
Tengo una clase (A) que controla diversos dispositivos. Para ello,
ésta clase A, tiene una instancia de una colección de objetos (D).

Según una lógica de funcionamiento, voy accediendo a los diferentes
objetos de la colección (dispositivos) y cambiando propiedades de
ellos, los cuales según programación pueden generar un evento que
debería ser capturado por la clase A.

Resumiendo: Como puedo generar una colección de objetos, los cuales
pueden enviar un evento a la clase instanciadora. Todo ello (claro
está) sin crear un delegado nuevo para cada uno de los objetos de la
colección.



Se puede crear un tipo único de delegado para todos los objetos. Cada
uno de ellos declara un evento del tipo de ese delegado. La clase A, al
ir agregando elementos a la colección, va conectando el evento de cada
uno de ellos a un método común dentro de la clase. Dentro de dicho
evento, se puede saber cuál de los elementos de la colección lo disparó
gracias al parámetro "sender".

public delegate void MiTipoDeDelegado(object sender, EventArgs e);
...
public class D
{
public event MiTipoDeDelegado MiEvento;
...
protected void DispararElEvento()
{
if (MiEvento!=null) MiEvento(this, EventArgs.Empty);
}
}
...
public class A
{
List<D> coleccion = new List<D>;
...
public void CargarColeccion()
{
for (..)
{
D elemento = new D();
D.MiEvento += new MiTipoDeDelegado(MiRutina);
coleccion.Add(elemento);
}
}
...
public void MiRutina(object sender, EventArgs e)
{
//El remitente del evento es (D)sender;
}
}

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida