正如您所看到的系统菜单,它们的语法如下:
MainMenu mainMenu = new MainMenu();
MenuItem fileMenuItem = new MenuItem("File");
mainMenu.MenuItems.Add(fileMenuItem);
this.Menu = mainMenu;
要为Click事件编写事件,我可以这样做吗?怎么样?
fileMenuItem.MenuItems.Add(new MenuItem("New",
MyMenuItemEventArgs(this, new MyMenuItemEventArgs("New")))
所以在MyMenuItemEventArgs中,我可以将我的opearion传递给一个操作的函数。在这种情况下,我已经通过了'New'。
我不想编写10个或更多处理程序,我只想编写一个包含许多Event args的处理程序。
答案 0 :(得分:1)
您应该实例化一个新的menuItem,然后使用Click属性添加处理程序。
MenuItem menuItem1=new MenuItem("Item text");
menuItem1.Click += new System.EventHandler(handler_method);
之后,您可以将其添加到菜单中:
fileMenuItem.MenuItems.Add(menuItem1);
答案 1 :(得分:1)
EventArgs
参数的值由触发事件的对象提供,在这种情况下为MenuItem
。因此,在一个处理程序中处理多个OnClick
对象的MenuItem
事件的唯一方法是使用sender
参数。您可以使用以下代码检查单击了哪个菜单项:
var mainMenu = new MainMenu();
var fileMenuItem = new MenuItem("file");
var openMenuItem = new MenuItem("open", OnClick);
var exitMenuItem = new MenuItem("exit", OnClick);
openMenuItem.Name = "open";
exitMenuItem.Name = "exit";
fileMenuItem.MenuItems.Add(openMenuItem);
fileMenuItem.MenuItems.Add(exitMenuItem);
mainMenu.MenuItems.Add(fileMenuItem);
this.Menu = mainMenu;
在事件处理程序中:
private void OnClick(object sender, EventArgs eventArgs)
{
var senderName = ((MenuItem) sender).Name;
if (senderName == "open")
{
//open was clicked
}
else if (senderName == "exit")
{
//exit was clicked
}
}