4L4K1 Ответов: 2

Добавьте обработчик событий Click event handeler к каждому ToolStripMenuItem динамически


Есть myToolStripMenuItem что я добавляю к нему какое-то подменю (имя подменю изменяется динамически)
ToolStripMenuItem tsmi = new ToolStripMenuItem(submenuName, null, new EventHandler(submenuName_Click));
myToolStripMenuItem.DropDownItems.Add(tsmi);

Как узнать, что пользователь нажимает на какое подменю?

BillWoodruff

Код в подсказке CP, на которую вы ссылались, очень низкого качества. Существует гораздо лучший способ справиться с этой задачей, если вы имеете дело со сценарием, в котором:

1. вам нужно часто добавлять и удалять новые ToolStripMenuItems во время выполнения.

2. Вы хотите, чтобы текстовое свойство каждого ToolStripMenuItem было уникальной строкой.

Если вы хотите увидеть пример такого решения для управления меню, просто спросите здесь.

2 Ответов

Рейтинг:
20

DamithSL

проверять Как добавить ToolStripMenuItems для управления menustrip или динамическое контекстное меню [^]
Когда вы добавляете пункты меню, дающие уникальный текст для них, то вы можете легко определить, какой пункт меню щелкнул объект отправителя события.
Пример кода:

ToolStripMenuItem menu = new ToolStripMenuItem(submenuName);
menu.Click += new EventHandler(menu_Click);
myToolStripMenuItem.DropDown.Items.Add(menu);
// add the event as below
void menu_Click(object sender, EventArgs e)
{
    var menuItem = sender as MenuItem; 
    var menuText = menuItem.Text;

    switch(menuText) {
        case "MenuItem1":
           // menu item1 clicked .. do something 
           break;

        case "MenuItem2":
          // menu item2 clicked .. do something 
          break;
         . ...
}


4L4K1

спасибо, что это работает. самая быстрая сольватация когда-либо

DamithSL

добро пожаловать!

BillWoodruff

Мой голос за № 3. Дамит, извини, но этот CP-совет-очень некачественный код. к вашему сведению: имхо, голосование № 3-это не отрицательное голосование.

DamithSL

Это нормально, но я очень рад, если вы можете пойти и проголосовать за этот совет с конструктивной обратной связью, почему вы считаете его некачественным и как его можно улучшить. это может помочь всему сообществу CP.

BillWoodruff

Привет, Дамит, я пошел дальше: я сообщил об этом чаевом: имхо, он никогда не должен был быть опубликован. Кроме того, я бы (проголосовал против или) оставил конструктивную (я надеюсь) обратную связь только по последним статьям/советам, с которыми я столкнулся: те, которые показали доказательства того, что автор ответил на комментарии пользователей за последние несколько лет.

К сожалению, существует так много некачественных путаных/нерелевантных/отрыгивающих-документальных статей и советов по CP, что было бы полной работой сообщать о них или пытаться улучшить их. Но, пожалуйста, не думайте ... основываясь на этом заявлении ... что я в любом случае недоволен CP: мне нравится CP, и есть так много замечательных статей и советов, настоящих драгоценных камней, которые имеют профессиональное качество кода, которые поддерживаются/расширяются в течение многих лет авторами. Чашка более чем наполовину полна ! И здесь, на QA, есть много высококачественных ответов, включая некоторые из ваших :)

твое здоровье, Билл

DamithSL

Билл, я добавил пример кода,это поможет в случае удаления чаевых в будущем :)

BillWoodruff

К сожалению, добавление некачественного кода, скопированного из статьи, не улучшает ваше решение.

Подумайте о сценарии, в котором во время выполнения есть Меню верхнего уровня с именем " MainMenu:

1. Новый ToolStripMenuItem с текстом "eightSubOne" добавляется (как пункт подменю) к пункту "MainMenu" с текстом "eight."

и ... чуть позже, после других возможных манипуляций с меню:

2. вы хотите добавить элемент подменю в "eightSubOne" с текстом "eightSubOneSubOne."

Как вы найдете пункт подменю "eightSubOne", чтобы добавить новый элемент ?

Подсказка: с кодом, который вы используете сейчас (из подсказки), у вас возникнут проблемы.

Кроме того, что происходит, когда вы хотите удалить MenuItem, и хотите, чтобы все его уровни sub...sub...? предметы удалены ?

DamithSL

Я понял твою точку зрения. Спасибо

Рейтинг:
0

Member 14188402

Используйте имя propeerty вместо свойства Text