2010-05-19 4 views
1

Я хотел бы определить индекс выбранного пункта контекстного меню. Но я не хочу, чтобы построить уникальный EventHandler для каждого пункта меню ... как я делаю этоКак получить индекс пункта контекстного меню обжига

MenuItem mi= StatusContextMenu.MenuItems.Add("Set option"); 
    mi.MenuItems.Add(0,new MenuItem("Set to A", new EventHandler(SetLetter))); 
    mi.MenuItems.Add(1,new MenuItem("Set to B", new EventHandler(SetLetter))); 
    mi.MenuItems.Add(2,new MenuItem("Set to C ", new EventHandler(SetLetter))); 
    mi.MenuItems.Add(3,new MenuItem("Set to D", new EventHandler(SetLetter))); 

private void SetLetter(object sender, System.EventArgs e) 
{ 
    index = ???? 
} 

C#, .net 2.0

ответ

3

Вы можете бросить параметр «отправителя» (приведение к MenuItem), чтобы найти индекс в коллекции mi.MenuItems.

С другой стороны, я бы обработчики событий настройки, используя анонимные функции ...

Э.Г.

mi.MenuItems.Add(0,new MenuItem("Set to A", (s, e) => SetLetter("A")); 

Тогда у вас есть SetLetter как:

private void SetLetter(string letterToSetTo) 
{ 
} 
+0

это фантастика ... Я не знаю, что я мог бы сделать это ... что открывает possibilitys в других областях. спасибо – fishhead

Смежные вопросы