【问题标题】:how to access Custom EventArgs class in Button click event?如何在按钮单击事件中访问自定义 EventArgs 类?
【发布时间】:2011-03-23 13:27:04
【问题描述】:

作为后续行动: access values within custom eventargs class

如何使用按钮单击或任何其他方法访问自定义 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

     }

感谢您的帮助。

【问题讨论】:

    标签: c# .net eventargs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你不能那样做。 Click 事件的EventArgs 始终是EventArgs 类型;你不能指望它是TraderEventArgs 类型,因为事件参数是由按钮创建的,而按钮对TraderEventArgs 一无所知。唯一可行的方法是创建自己的Button 控件,该控件使用TraderEventArgs 而不是EventArgs 引发事件

      【讨论】:

      • 那么如何通过单击按钮访问 TraderEventArg 中的信息?我不在乎按钮 eventargs 是否知道有关数据的任何信息。是不可能到达吗?
      • 为什么我不能这样做?公共静态 TraderEventArgs ev = TraderEventArgs;在页面顶部???
      • 好吧,这取决于 TraderEventArgs 来自哪里?它是在哪里创建的?
      • 第二个问题:您需要new 关键字来创建对象实例:public static TraderEventArgs ev = new TraderEventArgs();。但这并没有真正的意义,为什么要将事件 arg 存储在静态字段中?事件参数应该携带事件数据...
      • 新的 TraderEventArgs();无法工作,因为 TraderEventArgs 引用了实例化类时不存在的参数。要获取您提出的数据,甚至对应于它或尚未嵌入框架中的 eventargs 类(我认为,@Copsey 下面)。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        相关资源
        最近更新 更多