2011-03-23 85 views
1

作爲後續行動: access values within custom eventargs class如何訪問Button單擊事件中的Custom EventArgs類?

我如何訪問自定義EventArgs類中的公共變量,通過點擊按鈕或任何其他方法?

示例自定義事件參數類:

背後button_click事件
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; } 
    } 
} 

代碼:

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 

    } 

感謝您的幫助。

回答

1

當按鈕點擊事件引發時,它會創建傳入「e」的EventArgs。該對象不是由您創建的,而是由框架本身創建的,並且類型爲EventArgs。這可以防止您將其轉換爲其他類型。

如果您想要發生引發TraderEventArgs的事件,您需要創建一個事件,最好是EventHandler<TraderEventArgs>類型的事件,並將此事件引發到您控制的某個位置。這允許您生成正確類型的類,然後直接處理它(在單獨的事件處理程序中)。

1

你不能那樣做。 Click事件的EventArgs始終爲EventArgs;你不能指望它是TraderEventArgs類型,因爲事件參數是由按鈕創建的,並且按鈕不知道任何關於TraderEventArgs的內容。它可以工作的唯一方法是,如果你創建自己的Button控件引發了TraderEventArgs而不是EventArgs

+0

那麼如何從一個按鈕內點擊訪問TraderEventArg中的信息?我不在乎按鈕事件是否知道有關數據的任何信息。難道不可能嗎? – CraigJSte 2011-03-23 13:50:45

+0

爲什麼我不能這樣做? public static TraderEventArgs ev = TraderEventArgs;在頁面頂部? – CraigJSte 2011-03-23 13:56:47

+0

這取決於,TraderEventArgs從哪裏來?它在哪裏創建? – 2011-03-23 15:05:07

0

解決事件:通過自定義委託和事件,返回的數據傳遞自定義事件參數(數據表,陣,等等)...使用任何按鈕點擊或其他必要的事件。

因此,作爲正確的數據返回..我不能在這裏張貼的完整代碼委託的功能,但它是事件委託使用這個非常優秀的示例的變化......

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

相關問題