¿Cómo acceder a la clase EventArgs personalizada en el evento de clic de botón?

StackOverflow https://stackoverflow.com/questions/5405929

  •  29-10-2019
  •  | 
  •  

Pregunta

Como seguimiento de:acceder a valores dentro de la clase eventargs personalizada

¿Cómo accedo a variables públicas dentro de la clase Eventargs personalizada, haciendo clic en un botón o cualquier otro método?

Ejemplo de clase de argumentos de eventos personalizados:

public class TraderEventArgs: EventArgs
{
    private int _shares;
    private string _symbol;

    public TraderEventArgs(int shs, string sym)
    {
        this._shares = shs;
        this._symbol = sym;
    } 

    public decimal Price 
    {
        get {return _prices;}       
    }

   public int Shares
   {
       get { return _shares; }
   }
}

Código detrás del evento button_click:

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        // run trader app
        myApp.Main();

        // try to access TraderEventArgs class
        TraderEventArgs: EventArgs ev = TraderEventArgs: EventArgs();   // Invalid

        TraderEventArgs ev = new TraderEventArgs();   // this needs argument variables that are unassigned... ?

        TraderEventArgs ev = (TraderEventArgs)e;  //  Unable to cast object of type 'System.EventArgs' to type TraderEventArgs'.

        string sym = ev.Symbol.ToString();
        string sharws = ev.Shares.ToString();

        // do something with data

     }

gracias por la ayuda.

¿Fue útil?

Solución

Cuando se genera el evento de clic en el botón, se crea el EventArgs que pasa a "e".Ese objeto no fue creado por usted, sino por el propio marco, y es de tipo EventArgs.Esto impide que puedas convertirlo a un tipo diferente.

Si quieres tener un evento que recaude TraderEventArgs, necesitas crear un evento, preferiblemente del tipo EventHandler<TraderEventArgs>, y genere este evento en algún lugar que esté bajo su control.Esto le permite generar la clase del tipo correcto y luego manejarla (en un controlador de eventos separado) directamente.

Otros consejos

No puedes hacer eso.El EventArgs del evento Click es siempre de tipo EventArgs;no puede esperar que sea de tipo TraderEventArgs, porque el evento args es creado por el botón, y el botón no sabe nada sobre TraderEventArgs.La única forma en que podría funcionar es si crea su propio control Button que genera el evento con un TraderEventArgs en lugar de un EventArgs

Solution: Pass custom event args through a custom delegate and event that returns the data (Datatable, Array, etc)...using whatever button click or other event necessary.

So as a function of the delegate the correct data is returned.. I can not post the complete code here, but it is a modification of this very excellent example on event delegate usage...

Core C# and .NET 3.7. Delegates and Events http://flylib.com/books/en/4.253.1.38/1/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top