2017-06-26 35 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#语言允许使用=作为对象初始化操作符,但不能使用+ =或 - =,它们在事件类的后台添加和删除函数。这是一种语言选择 - 我相信它的基础是不要在构造函数中包含复杂的功能以保持初始化阶段的清洁。

解决这个限制是可能的,但没有解决方案更容易理解,并且与初始化对象后简单添加侦听器相比,需要更少的代码行。

总之,没有简写。