2009-04-17 8 views
0

純粋なC#コードでカスタムイベントを使用する方法を簡単に理解できますが、asp:button clickでカスタムイベント引数を渡すにはどうすればよいですか?標準のasp:controlsにカスタムイベント引数を渡す方法

私はあらゆる種類のもの(新しいイベント引数、新しいデリゲートなどを定義する)を試しましたが、私は運がなかった。

標準のASPコントロールでこれを行う方法のチュートリアルはありますか?

答えて

3

EventArgsがSystem.EventArgsから継承している限り、それらを渡すことができます。その後、イベントハンドラの内部でイベントを適切なサブタイプにキャストできます。ここで

は一例です:

using System; 

class Program 
{ 
    static event EventHandler Foo; 

    static void Main() 
    { 
     // Here is cast the EventArgs to FooEventArgs 
     Foo += (o,e) => Console.WriteLine(((FooEventArgs)e).Number); 

     // Notice that I am passing a "FooEventArgs" instance 
     // even though the delegate signature for "EventHandler" 
     // specifies "EventArgs". Polymorphism in action. :) 
     Foo(null, new FooEventArgs { Number = 1 }); 
    } 
} 

class FooEventArgs : EventArgs 
{ 
    public int Number { get; set; } 
} 

は、私はあなたがとても残念な鋳造のこの種はneccessaryである既存の制御代議員で作業していることを知っています。ただし、.NET 2.0以降にはEventHandler<T> where T : EventArgsデリゲートがあります。これは、キャストせずに上記のことを行うことができます。

+0

私はeventargsと私のcustomeventargsの間の互換性に関するいくつかの問題がありました。私は鋳造がそれを解決できると思う。私はそれを試してみましょう:) – dotnetdev

1

独自のコントロールを作成せずにこれを行う方法はないと思います。しかし、私は時には、ボタンにcommandagumentとcommandnameプロパティを使用して、追加の情報を提供します。

1

私はあなたができるとは思いません。 Button自体は、自分自身のEventArgsオブジェクトを持つClickイベントを呼び出します。残念ながら、その呼び出しをハイジャックすることはできません。ただし、クロージャを使用することができます:ところで

protected void Page_Load(object sender, EventArgs e) 
{ 
    int number = 1; 
    button.Click += (o, args) => Response.Write("Expression:"+number++); 
    number = 10; 
    button.Click += delegate(object o, EventArgs args) { Response.Write("Anonymous:"+number); }; 
} 

は、このための出力は、この出力は、クロージャを理解することへの大きな一歩であるである理由を理解

Expression:10Anonymous:11
です!クリックイベントが処理されるときに numberが有効範囲外であっても、定義されたイベントハンドラの両方がそのイベントハンドラへの参照を持つため、クリックイベントは破棄されません。だから、価値はもはや必要がなくなるまで維持されます。 私はそれが閉鎖の最も技術的な説明ではありませんが、彼らが何であるかのアイデアを与える必要があります知っている。

関連する問題