| 
          
            □投稿者/ Azulean (18回)-(2012/08/17(Fri) 13:10:03)
              | ■63344 / inTopicNo.4) | Re[3]: WPFのStoryboard.Completedで質問 |  
 
          
            
              
                |  | 2012/08/17(Fri) 13:11:12 編集(投稿者) 
 ■No63343 (はつね さん) に返信
 > ヘルプファイルで一項目として説明されているとではなく
 > +=の後が別の書き方があるのでは?
 > と想定しています。
 
 改めて探してみると、1 ページで説明されていますね。
 以下のページに、普通のメソッドのやり方、ラムダ式でのやり方、匿名メソッドでのやり方が列挙されています。
 
 方法 : イベント サブスクリプションとサブスクリプションの解除 (C# プログラミング ガイド)
 http://msdn.microsoft.com/ja-jp/library/ms366768.aspx
 
 上記のページでは匿名メソッドのパラメーターリストの省略について言及されていないので、以下のページも合わせる形でしょうか。
 
 匿名メソッド (C# プログラミング ガイド)
 http://msdn.microsoft.com/ja-jp/library/0yw3tz5k.aspx
 
 これで求めていたものに対して足りるのかどうかはわかりませんが…。
 
 -----
 (念のため)
 += の後に EventHandler 型として解釈できる要素であれば変数でも、メソッドでも、ラムダ式でも、匿名メソッドでもできます。
 
 _StoryBoard.Completed += new EventHandler(メソッド名);
 _StoryBoard.Completed += メソッド名;
 EventHandler eh = メソッド名;
 _StoryBoard.Completed += eh;
 _StoryBoard.Completed += delegate { /* 処理 */ };
 _StoryBoard.Completed += delegate(object sender, EventArgs e) { /* 処理 */ };
 _StoryBoard.Completed += (sender, e) => { /* 処理 */ };
 
 // メソッド名 は void (object sender, EventArgs e) という形であること。
 
 
 ぱっと思いつく範囲でこれぐらい書けます。
 いずれも右辺(+= の右)は EventHandler 型として解釈できるものですね。
 
 -----
 _StoryBoard.Completed += delegate { _StoryBoard.Stop(this); }; の単純な展開例としては以下ですね。
 
 public void SampleMethod()
 {
 _StoryBoard.Completed += CompletedMethod;
 }
 
 public void CompletedMethod(object sender, EventArgs e)
 {
 _StoryBoard.Stop(this);
 }
 
 ただ、匿名メソッドの内のコードによっては、コンパイラが独自のクラスを生成します。
 このあたりは C# 言語仕様書に書いてありそうです。Visual Studio のインストール先の VC# の Specification あたりに。4.0 向けであれば「6.5.1 デリゲート型への匿名関数の変換の評価」。
 
 |  |