Системное меню и делегаты - PullRequest
       2

Системное меню и делегаты

0 голосов
/ 19 февраля 2012

Как вы уже видели системные меню, они имеют такой синтаксис:

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 я могу передать свой оператор одной функции, которая работает. В этом случае я передал 'New'.

Я не хочу писать 10 или более обработчиков, я просто хочу написать один обработчик с множеством аргументов Event.

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Значение параметра 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
    }
}
1 голос
/ 19 февраля 2012

Вы должны создать новый элемент menuItem, а затем использовать атрибут Click, чтобы добавить обработчик.

MenuItem menuItem1=new MenuItem("Item text");

menuItem1.Click += new System.EventHandler(handler_method);

После этого вы можете добавить его в свое меню:

fileMenuItem.MenuItems.Add(menuItem1);
...