2009-08-19 32 views
72

¿A qué se refieren los remitentes y eventArgs? ¿Cómo puedo hacer uso de ellos (para el escenario a continuación)?.NET Events - ¿Qué son Object Sender y EventArgs e?

Escenario:

estoy tratando de construir un control personalizado con una función de eliminación, y quiero ser capaz de eliminar el control que se ha hecho clic en una página que contiene muchos de los mismos control personalizado.

+0

@rogerdeuce, encontramos este problema en un proyecto ASP.net C#, por lo tanto, está etiquetado como C#. Agregué la etiqueta vb también según tus comentarios de edición. – stringo0

Respuesta

77

El remitente es el control para el que se realiza la acción (por ejemplo, OnClick, es el botón).

Los EventArgs son argumentos que el implementador de este evento puede encontrarle útil. Con OnClick no contiene nada bueno, pero en algunos eventos, como por ejemplo en un GridView 'SelectedIndexChanged', contendrá el nuevo índice u otros datos útiles.

lo que Chris está diciendo es que usted puede hacer esto:

protected void someButton_Click (object sender, EventArgs ea) 
{ 
    Button someButton = sender as Button; 
    if(someButton != null) 
    { 
     someButton.Text = "I was clicked!"; 
    } 
} 
+4

¡Gracias! ¿Te importaría expandir en eventargs, o proporcionar un enlace sobre ellos? Por ejemplo, ¿puedo pasar un valor de cadena a través de eventargs? ¿Si es así, cómo? – stringo0

+5

Bueno, "tú" eres la clase que envía el evento. Por lo general, subclases 'EventArgs' con tu propio 'MyControlsEventEventArgs' y luego configuras las propiedades para lo que quieres pasar. Entonces solo pone cosas aquí cuando escribe el control enviando el evento. Si desea poner un valor de cadena en el * *, normalmente utiliza el campo 'CommandArgument', al que puede acceder al convertir al remitente en 'Button' (como en mi publicación). –

7

manualmente arrojado al remitente que el tipo de control personalizado, y luego lo utilizan para eliminar o desactivar etc. Por ejemplo, algo como esto:

private void myCustomControl_Click(object sender, EventArgs e) 
{ 
    ((MyCustomControl)sender).DoWhatever(); 
} 

El 'emisor' es sólo el objeto que se acciona (por ejemplo, hizo clic).

El evento args está subclasificado para controles más complejos, por ejemplo, una vista de árbol, para que pueda conocer más detalles sobre el evento, por ejemplo, dónde hicieron clic exactamente.

+0

¿Podría ampliar esto un poco? ¿Cómo proceso el remitente/eventargs? No estoy acostumbrado a usarlos. – stringo0

+0

@ stringo0 remitente es el objeto que generó el evento (llama al delegado del evento pasando 'this' por convención). EventArgs, si no está subclasificado, es totalmente ** inútil **. Entonces, a menos que tenga un parámetro SelectedIndexEventArgs o CancelEventArgs, no puede hacer nada. Si no está acostumbrado a usarlos, simplemente no los necesita, pero los necesita en la firma del método. Entonces puedes simplemente ignorarlos. Si escribe una lambda para manejar eventos, ni siquiera necesita escribir los nombres de estos argumentos –

19

sender se refiere al objeto que invoca el caso de que disparó el controlador de eventos. Esto es útil si tiene muchos objetos que usan el mismo controlador de eventos.

EventArgs es una especie de clase base ficticia. En sí mismo es más o menos inútil, pero si se deriva de él, puede agregar los datos que necesita para pasar a los controladores de eventos.

Cuando implemente sus propios eventos, use un EventHandler o EventHandler<T> como su tipo. Esto garantiza que tendrá exactamente estos dos parámetros para todos sus eventos (lo cual es bueno).

5
  1. 'emisor' se llama objeto que tiene algún tipo de acción se realiza en algunos control de

  2. 'evento' de su tener alguna información sobre el control que tiene algunos behavoiur e identidad realizan por algunos user.when acción generar por ocurrir para el evento agregar mantener dentro de la matriz se llama evento agrs

Cuestiones relacionadas