在无引用对象上添加事件 C#

Adding event on no-referenced object c#

我有一个动态创建的菜单,如下所示:

ContextMenu MenuNote = new ContextMenu();
    
MenuNote.MenuItems.AddRange(new MenuItem[]
{
      new MenuItem() { Name = "open", Text = "Ouvrir"},
      new MenuItem() { Name = "mute", Text = "Sourdine"},
      new MenuItem() { Name = "exit", Text = "Quitter" }
});

我不创建引用,因为之后我不需要这些对象,除了它们各自的事件。

然后我尝试做这样的事情,但我收到一个我无法识别的错误:

new MenuItem() { Name = "open", Text = "Ouvrir"}.Click += new EventHandler(MenuOpen_Click)

我收到此错误,我对“向未引用的对象添加事件”的研究对我没有帮助

Cannot implicitly convert type 'void' to 'System.Windows.Forms.MenuItem'

我真的需要为每个项目创建引用吗?我只是语法错误吗?

谢谢

C#6 曾考虑在对象初始值设定项中分配事件处理程序,但 AFAIK 从未将其纳入该语言,请参阅 Assigning events in object initializer

您可以编写一个扩展方法,允许您使用流畅的语法添加事件处理程序:

static class MenuItemExtensions
{
    public static MenuItem OnClick(this MenuItem menuItem, EventHandler handler)
    {
        menuItem.Click += handler;
        return menuItem;
    }
}

使用:

MenuNote.MenuItems.AddRange(new MenuItem[]
{
      new MenuItem() { Name = "open", Text = "Ouvrir"}.OnClick(MenuOpen_Click),
      new MenuItem() { Name = "mute", Text = "Sourdine"}.OnClick(MenuMute_Click),
      new MenuItem() { Name = "exit", Text = "Quitter" }.OnClick(MenuExit_Click)
});