在无引用对象上添加事件 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)
});
我有一个动态创建的菜单,如下所示:
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)
});