如何在Button click事件中访问Custom EventArgs类?

时间:2011-03-23 13:27:05

标签: c# .net eventargs

作为后续行动: 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

     }

感谢您的帮助。

3 个答案:

答案 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/