作为后续行动: access values within custom eventargs class
如何使用按钮单击或任何其他方法访问自定义Eventargs类中的公共变量?
示例自定义事件Args类:
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; }
}
}
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
}
感谢您的帮助。
答案 0 :(得分:1)
你做不到。 EventArgs
事件的Click
始终为EventArgs
类型;你不能指望它是TraderEventArgs
类型,因为事件args是由按钮创建的,而按钮对TraderEventArgs
一无所知。唯一可行的方法是,如果您创建自己的Button
控件,则会使用TraderEventArgs
代替EventArgs
答案 1 :(得分:1)
当引发按钮点击事件时,它会创建传递到“e”的EventArgs
。该对象不是由您创建的,而是由框架本身创建的,并且类型为EventArgs
。这可以防止您将其转换为其他类型。
如果您希望有一个引发TraderEventArgs
的事件,您需要创建一个事件,最好是EventHandler<TraderEventArgs>
类型的事件,并在您控制的某个地方举起此事件。这允许您生成正确类型的类,然后直接处理它(在单独的事件处理程序中)。
答案 2 :(得分:0)
解决方案:通过自定义委托和事件传递自定义事件args,该委托和事件返回数据(数据表,数组等)...使用任何按钮点击或其他必要事件。
因此作为委托的一个功能,返回正确的数据..我不能在这里发布完整的代码,但它是对事件委托使用的这个非常好的例子的修改......
Core C#和.NET 3.7。代表和活动 http://flylib.com/books/en/4.253.1.38/1/