- 題名: ラムダ式でハンドルしたイベントについて
- 日時: 2010/11/15 11:52:40
- ID: 27564
- この記事の返信元:
- (なし)
- この記事への返信:
- [27565] Re[1]: ラムダ式でハンドルしたイベントについて2010/11/15 12:15:30
- ツリーを表示
> .NET 3.0 以降、ラムダ式を使用してイベントをハンドリングする事が可能です。 .NET のバージョンとは関係なく、C# 3.0 以降ですね。ラムダ式のサポートは。 開発ターゲットが .NET 2.0 でも使用できます。 さて本題ですが、一旦デリゲートオブジェクトとして変数に取るといいでしょう。 EventHandler handler = (sender, e) => MessageBox.Show("click"); button1.Click += handler; button1.Click -= handler; こんなのとか。 EventHandler handler = null; handler = (sender, e) => { button1.Click -= handler; MessageBox.Show("click"); }; button1.Click += handler;
分類:[.NET]
初めて質問させて頂きます。
@IT 様の「C#ラムダ式 基礎文法最速マスター」などでも紹介されています通り、.NET 3.0 以降、ラムダ式を使用してイベントをハンドリングする事が可能です。
この「ラムダ式を使用したイベントハンドリングの後処理」について質問させて頂きます。
従来、イベントのハンドルを行う場合(例えば Button.Click イベントなど)、
button1.Click += button1_Click;
とし、
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ボタンがクリックされました。");
}
と記述していたコードがラムダ式を使用する事により、
button1.Click += (sender, e) => MessageBox.Show("ボタンがクリックされました。");
と、非常にコンパクトにコードを記述する事ができる様になりました。
ここで質問なのですが、前述(従来)の方法にてハンドルしたイベントを開放する場合、
button1.Click -= button1_Click; ・・・(★)
と書く事が出来ましたが、ラムダ式にてハンドルしたハンドラは、(★)により得られる結果と同じ結果を得るには、どの様に記述すれば良いのでしょうか?
上記について、私の検索方法が悪いのか、解決につながる情報が得られませんでした。
私が考える解決策としては、「ラムダ式を使用しない」と言う事しか思いつきませんでした。
どなたか、ラムダ式を使用したイベント ハンドラの解放について、解決策がお分かりになる方がいらっしゃいましたら、お手数ですが、ご教授の程、宜しくお願い致します。