2013-07-30 12 views
7

C#(.NET 4.5)では、オブジェクトを作成する際にイベントを購読したいと思います。C#でオブジェクトを作成中にイベントを購読する

以下、もちろん、動作します:

CheckBox c = new CheckBox(); 
c.Name = "TheCheckBox"; 
c.Checked += c_Checked; 

しかし、それはの線に沿って何かをすることは可能ですかどうかを確認したいが:

CheckBox c = new CheckBox() { 
    Name = "TheCheckBox", 
    Checked += c_Checked 
} 

ポスト議論編集:これは次のようなものです:

MyUniformGrid.Add(new CheckBox() { 
    Name = "TheCheckBox", 
    Checked += CheckHandler 
}); 
+0

それはあなた自身のコントロールだ場合は、コンストラクタの引数として '>'のFuncを<持つことができるとそこ – Default

+0

@defaultそれを設定する必要がありますが、サンプルコードで答えを投稿できるに? – mbaytas

答えて

12

残念ながら、イベント初期化はオブジェクト初期化子ではサポートされていません。それは

ハーフウェイハウスがある...それは本当に簡単ないくつかのケースでGUIを作成することができます、ないでしょう:

Checkbox c = new CheckBox { Name = "TheCheckBox" }; 
c.Checked += c_Checked; 

(理想的には、実際に意味のある名前にc_Checkedの名前を変更します - ここではVS生成の名前が嫌いです...)

+0

ありがとうございました。私は半分の解決策を認識していますが、それは私のためには機能しません。私がしたかったのは 'MyUniformGrid.Add(新しいCheckBox(){Checked + = CheckHandler}))'のようなものでした。 – mbaytas

+3

@baytas:そうです、それは基本的にはありません。もしあなたが@Baytas One-Linerが常にそうとは限らない場合には、拡張メソッドを使用して、 'MyUniformGrid.Add(new CheckBox()。With(c => c.Checked + = CheckHandler))'を呼び出すことができます。 –

+1

平均可読、btw。 – Leri

0

コントロールをコントロールしている場合は、常にコンストラクタでイベントハンドラを設定できます。ような何か:

public class Program 
{ 
    private static void Main(string[] args) 
    { 
     Checkbox checkbox = new Checkbox(OnChecked); 
     checkbox.TriggerChecked(); 
    } 

    private static void OnChecked(object sender, EventArgs args) 
    { 
     Console.WriteLine("triggered event"); 
    } 
} 

public class Checkbox 
{ 
    public event EventHandler<EventArgs> Checked; 

    public Checkbox(EventHandler<EventArgs> eventHandler) 
    { 
     Checked += eventHandler; 
    } 


    public void TriggerChecked() 
    { 
     var handler = Checked; 
     if (handler != null) 
      handler(this, new EventArgs()); 
    } 
} 
+0

私の場合は、通常のやり方(問題の最初のコードブロック)を行うだけで良い。それにもかかわらず、これは私には新しく、私は常に新しいものを学ぶことができて嬉しいです。見せていただきありがとうございます。 – mbaytas

関連する問題