2017-06-26 34 views
0

我發現我經常喜歡創造和增加新的項目添加到列表中循環填充列表時:c#在對象實例化過程中綁定事件監聽器?

foreach(var cat in ctx.InventoryCategories) 
{ 
    pnl_catList.Controls.Add(new RadioButton() 
    { 
     Text = cat.CategoryName, 
     Tag = cat, 
     Checked = false, 

     // how could I do this? 
     Click += onClick(), 
    }) 
} 

但我現在知道如何添加事件偵聽器的唯一方法是很長的路要走:

foreach(var cat in ctx.InventoryCategories) 
{ 
    var newButton = new RadioButton() 
    { 
     Text = cat.CategoryName, 
     Tag = cat, 
     Checked = false, 
    }) 

    newButton.Click += onClick(); 
    pnl_catList.Controls.Add(newButton); 
} 

這是不好的做法還是有一個很好的簡短的方法來綁定事件?

+0

後者是非常好的做法。我找不到通過初始化程序添加事件處理程序的理智方法。 –

回答

2

字段分配和向事件添加成員是兩件不同的事情。 C#語言允許使用=作爲對象初始化操作符,但不能使用+ =或 - =,它們在事件類的後臺添加和刪除函數。這是一種語言選擇 - 我相信它的基礎是不要在構造函數中包含複雜的功能以保持初始化階段的清潔。

解決這個限制是可能的,但沒有解決方案更容易理解,並且與初始化對象後簡單添加偵聽器相比,需要更少的代碼行。

總之,沒有簡寫。