Disparar un evento cualquiera

28/08/2008 - 19:58 por Pedro | Informe spam
No hay un RaiseEvent en C# ?

Es decir para disparar un evento determinado de un objeto.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
28/08/2008 - 20:57 | Informe spam
"Pedro" wrote in message
news:e%
No hay un RaiseEvent en C# ?

Es decir para disparar un evento determinado de un objeto.



No hay ninguna palabra clave especial. Se dispara llamando al propio
nombre del evento. Por ejemplo:

class prueba
{
public delegate void MiDelegado(object sender, EventArgs e);
public event MiDelegado MiEvento;

public void DispararEvento()
{
if (MiEvento!=null)
MiEvento(this, EventArgs.Empty);
}
}

En el código anterior la linea que dispara el evento es la que dice
MiEvento(this, EventArgs.Empty).
Respuesta Responder a este mensaje
#2 Pedro
28/08/2008 - 21:38 | Informe spam
Pero si trato por ejemplo de llamar cualquier metodo como Click, Validated,
etc. con ese criterio y no lo permite.
Me dice que un evento solo debe estar a la izquierda del operador += o -=.



"Alberto Poblacion"
escribió en el mensaje news:%23lY9y$
"Pedro" wrote in message
news:e%
No hay un RaiseEvent en C# ?

Es decir para disparar un evento determinado de un objeto.



No hay ninguna palabra clave especial. Se dispara llamando al propio
nombre del evento. Por ejemplo:

class prueba
{
public delegate void MiDelegado(object sender, EventArgs e);
public event MiDelegado MiEvento;

public void DispararEvento()
{
if (MiEvento!=null)
MiEvento(this, EventArgs.Empty);
}
}

En el código anterior la linea que dispara el evento es la que dice
MiEvento(this, EventArgs.Empty).


Respuesta Responder a este mensaje
#3 Alberto Poblacion
29/08/2008 - 08:54 | Informe spam
"Pedro" wrote in message
news:%
Pero si trato por ejemplo de llamar cualquier metodo como Click,
Validated, etc. con ese criterio y no lo permite.
Me dice que un evento solo debe estar a la izquierda del operador += o -=.



Ah, si. Esto solo funciona para disparar el evento desde la clase que lo
define. Si es al revés, es decir, el evento está ya definido en una clase y
quieres forzarla "desde fuera" a que dispare su evento, sólo puedes hacerlo
si los diseñadores de la clase lo tuvieron en cuenta y añadieron en su clase
algún método público para disparar el evento. Por ejemplo en la clase Button
de System.Windows.Forms tiene un método llamado "PerformClick" que por
dentro dispara el evento Click. En otros casos hay combinaciones de
operaciones que disparan eventos, por ejemplo, si quieres forzar el evento
Paint de un control puedes llamar al método Invalidate(), que ocasiona que
se repinte el control.
Si necesitas hacerlo con otro evento que no tenga un mecanismo parecido
a los anteriores, no vas a poder. En su lugar, tendrás que recurrir a llamar
directamente a las rutinas que estén conectadas al evento. Por ejemplo, si
al evento Validated de un textbox tienes conectada una rutina como esta:
private void textBox1_Validated(object sender, EventArgs e) { ... }
puedes llamarla ejecutando textBox1_Validated(this,EventArgs.Empty); con
lo que la rutina se ejecutará igual que si se hubiese disparado el evento.
Respuesta Responder a este mensaje
#4 Pedro
30/08/2008 - 22:05 | Informe spam
or ejemplo, si
al evento Validated de un textbox tienes conectada una rutina como esta:
private void textBox1_Validated(object sender, EventArgs e) { ... }
puedes llamarla ejecutando textBox1_Validated(this,EventArgs.Empty); con
lo que la rutina se ejecutará igual que si se hubiese disparado el evento.




El problema, he visto, es que si tengo otros handler previamente asignados
al validated esos no se ejecutan.
Respuesta Responder a este mensaje
#5 Alberto Poblacion
31/08/2008 - 10:09 | Informe spam
"Pedro" wrote in message
news:
or ejemplo, si
al evento Validated de un textbox tienes conectada una rutina como esta:
private void textBox1_Validated(object sender, EventArgs e) { ... }
puedes llamarla ejecutando textBox1_Validated(this,EventArgs.Empty);
con lo que la rutina se ejecutará igual que si se hubiese disparado el
evento.




El problema, he visto, es que si tengo otros handler previamente asignados
al validated esos no se ejecutan.



Efectivamente, como te decía, tienes que "... llamar directamente a _LAS_
rutinas que estén conectadas al evento". Lo cual requiere que sepas cuáles
son, cosa que sólo ocurrirá si las has conectado tú mismo.
Si tienes un delegado ya conectado y quieres conocer todos los gestores
de eventos conectados al mismo, la cosa es complicadilla. No hay una
solución universal que valga para cualquier tipo de delegado, pero para los
casos más comunes, hay una solución a base de Reflexión que está descrita en
este hilo:
http://forums.msdn.microsoft.com/en...fa3ed1f2c4
Busca el "post" que está marcado como "answer", y sigue bajando en el
hilo para ver algunas advertencias acerca de las limitaciones de este
método.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida