Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Передача параметров обработчику события


Автор: href 13.3.2009, 16:21
Воюю в c# с ContextMenu. Создаю в нём MenuItem'ы и хочу, чтобы при клике на любом из них вызывалась одна и та же функция, а какой именно из MenuItem'ов нажат определять через параметр этой функции.

Подскажите, пожалуйста, как это можно сделать, ведь стандартный синтаксис обработчика выглядит как:

tmpMenuItem.Click += new EventHandler(MenuItem_click);

и не позволяет передавать параметры. Как быть?

Автор: DVariuS 13.3.2009, 16:47
Цитата(href @ 13.3.2009,  15:21)
tmpMenuItem.Click += new EventHandler(MenuItem_click);

Этим кодом Вы назначаете обработчик MenuItem_click событию Click.
Далее необходимо написать обработчик:
Код

private void MenuItem_click(object sender, EventArgs e)
{
//код обработчика
}

Здесь параметр sender - объект, возбуждающий событие.

Автор: href 13.3.2009, 16:52
Цитата

Этим кодом Вы назначаете обработчик MenuItem_click событию Click.


Это-то понятно. Непонятно как мне для MenuItem_click передать свою переменную.

Автор: PashaPash 13.3.2009, 17:25
href, прописываешь своим менюайтемам разный Tag. Потом в обработчике делаешь object tag = ((MenuItem)sender).Tag...

Автор: diadiavova 13.3.2009, 20:34
Цитата(href @  13.3.2009,  16:21 Найти цитируемый пост)
Воюю в c# с ContextMenu. Создаю в нём MenuItem'ы и хочу, чтобы при клике на любом из них вызывалась одна и та же функция, а какой именно из MenuItem'ов нажат определять через параметр этой функции.

Просто надо назначить всем MenuItem'мам один обработчик, а какой из них кликнут определять по параметру sender. Если же "кровь с носа" надо, чтобы обработка производилась в методе, имеющем другую сигнатуру, то надо создать этот метод и вызвать его из обработчика кликов(передав нужные аргументы)...Правда не очень понятно зачем это надо.
Код

void initMenu()
{
    foreach(MenuItem itm in myMenu.MenuItems)
        {
             itm.Click += new EventHandler(MenuItem_click);
        }
}

private void MenuItem_click(object sender, EventArgs e)
{
        MyClickHandler((MenuItem)sender);
}

void MyClickHandler(MenuItem item)
{
//здесь разместить код обработчика
//параметр укажет отправителя события

}


Автор: href 14.3.2009, 01:13
PashaPash, спасибо! Так и поступил — помогло   smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)