Frage

Im Anschluss an: Zugriffswerte innerhalb der benutzerdefinierten Eventargs-Klasse

Wie greife ich mit einem Klick auf eine Schaltfläche oder einer anderen Methode auf öffentliche Variablen in einer benutzerdefinierten Eventargs-Klasse zu?

Beispielklasse für benutzerdefinierte Ereignisargumente:

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; }
   }
}

Code hinter dem Ereignis 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

     }

Danke für die Hilfe.

War es hilfreich?

Lösung

Wenn das Schaltflächenklickereignis ausgelöst wird, wird der EventArgs erstellt, der an "e" übergeben wird.Dieses Objekt wurde nicht von Ihnen erstellt, sondern vom Framework selbst und ist vom Typ EventArgs.Dies verhindert, dass Sie es in einen anderen Typ umwandeln können.

Wenn Sie ein Ereignis haben möchten, das TraderEventArgs auslöst, müssen Sie ein Ereignis erstellen, vorzugsweise vom Typ EventHandler<TraderEventArgs>, und dieses Ereignis an einer Stelle auslösen, auf die Sie Einfluss haben.Auf diese Weise können Sie die Klasse des richtigen Typs generieren und dann (in einem separaten Ereignishandler) direkt verarbeiten.

Andere Tipps

Das kannst du nicht machen.Der EventArgs des Click-Ereignisses ist immer vom Typ EventArgs.Sie können nicht erwarten, dass es vom Typ TraderEventArgs ist, da die Ereignisargumente von der Schaltfläche erstellt werden und die Schaltfläche nichts über TraderEventArgs weiß.Die einzige Möglichkeit besteht darin, ein eigenes Button-Steuerelement zu erstellen, das das Ereignis mit einem TraderEventArgs anstelle eines EventArgss auslöst

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/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top