Wie greife ich auf die Custom EventArgs-Klasse im Button-Click-Ereignis zu?
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.
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 EventArgs
s 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/