7

在 C# (.NET 4.5) 中,我想在创建对象时订阅一个事件。

当然,以下内容会起作用:

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
});
4

2 回答 2

12

不,不幸的是,对象初始化程序不支持事件订阅。在某些情况下,它会使创建 GUI 变得非常简单,但没有......

中途之家是:

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

(理想情况下重命名c_Checked为一个真正有意义的名字——我讨厌这里的 VS 生成的名字......)

于 2013-07-30T08:43:58.593 回答
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());
    }
}
于 2013-07-30T09:04:37.397 回答