1

作为后续: 访问自定义 eventargs 类中的值

如何使用按钮单击或任何其他方法访问自定义 Eventargs 类中的公共变量?

示例自定义事件参数类:

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

     }

感谢帮助。

4

3 回答 3

1

你不能那样做。EventArgs事件的Click总是类型EventArgs; 你不能指望它是 type TraderEventArgs,因为事件 args 是由按钮创建的,而按钮不知道任何关于TraderEventArgs. 它可以工作的唯一方法是,如果您创建自己的Button控件,该控件使用 aTraderEventArgs而不是EventArgs

于 2011-03-23T13:36:06.490 回答
1

当引发按钮单击事件时,它正在创建EventArgs传递给“e”的 。该对象不是由您创建的,而是由框架本身创建的,并且类型为EventArgs. 这可以防止您将其转换为不同的类型。

如果你想有一个引发的事件TraderEventArgs,你需要创建一个事件,最好是 type EventHandler<TraderEventArgs>,并在你控制的地方引发这个事件。这允许您生成正确类型的类,然后直接处理它(在单独的事件处理程序中)。

于 2011-03-23T15:33:06.223 回答
0

解决方案:通过自定义委托和返回数据的事件(数据表、数组等)传递自定义事件参数...使用任何按钮单击或其他必要的事件。

因此,作为委托的函数,返回了正确的数据。我不能在这里发布完整的代码,但它是对这个非常好的事件委托使用示例的修改......

核心 C# 和 .NET 3.7。代表和活动 http://flylib.com/books/en/4.253.1.38/1/

于 2011-03-23T14:50:34.070 回答