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「e」に渡されるが作成されます。そのオブジェクトはあなたによって作成されたのではなく、フレームワーク自体によって作成されたものであり、タイプはEventArgsです。これにより、別のタイプにキャストできなくなります。

を発生させるイベントTraderEventArgsが必要な場合は、できればタイプのイベントを作成しEventHandler<TraderEventArgs>、自分で制御できる場所でこのイベントを発生させる必要があります。これにより、正しいタイプのクラスを生成し、それを(別のイベントハンドラーで)直接処理できます。

于 2011-03-23T15:33:06.223 に答える
1

そんなことはできません。イベントのEventArgsClick常にタイプEventArgsです。TraderEventArgsイベント引数はボタンによって作成され、ボタンは について何も知らないため、タイプ であるとは期待できませんTraderEventArgs。それが機能する唯一の方法は、の代わりにでButtonイベントを発生させる独自のコントロールを作成する場合ですTraderEventArgsEventArgs

于 2011-03-23T13:36:06.490 に答える
0

解決策: カスタム デリゲートと、データ (Datatable、Array など) を返すイベントを介してカスタム イベント引数を渡します。必要なボタン クリックまたはその他のイベントを使用します。

したがって、デリゲートの関数として正しいデータが返されます.ここに完全なコードを投稿することはできませんが、イベントデリゲートの使用に関するこの非常に優れた例を変更したものです...

コア C# および .NET 3.7。デリゲートとイベント http://flylib.com/books/en/4.253.1.38/1/

于 2011-03-23T14:50:34.070 に答える