Как добавить действие щелчка к элементам ToolStripMenuItem.DropDown, которые были созданы динамически? - PullRequest
1 голос
/ 28 января 2020

Итак, я создаю некоторые элементы в favsToolStripMenuItem.DropDown ( ToolStripMenuItem ) на основе файла:

using (StreamReader reader = new StreamReader("text.ini"))
{
  while (true)
  {
    string line = reader.ReadLine();
    if (line== null)
      break;
    favsToolStripMenuItem.DropDown.Items.Add(line);
  }
}

Но как я могу добавить событие клика для них? Я хочу событие клика, основанное на имени элемента (текст).

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Сначала необходимо назначить событие при создании каждого элемента меню.

using (StreamReader reader = new StreamReader("text.ini"))
{
    while (true)
    {
    string line = reader.ReadLine();
    if (line== null)
        break;

    ToolStripMenuItem menu = new ToolStripMenuItem(line);
    menu.Click += new EventHandler(menu_Click);
    favsToolStripMenuItem.DropDown.Items.Add(menu);
    }
}

Теперь у каждого элемента подменю есть свое событие, которое вызывается при нажатии. Таким образом вы выбираете, какое событие вызывать, основываясь на имени / тексте элемента:

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;
         . ...
}
0 голосов
/ 28 января 2020

Удалите метод щелчка:

private void DropDown_Click(object sender, EventArgs e) {
  ToolStripItem tsi = sender as ToolStripItem;
  if (tsi != null) {
    MessageBox.Show(tsi.Text);
  }
}

, а затем используйте параметр Add, который включает обработчик событий:

favsToolStripMenuItem.DropDown.Items.Add(line, null, DropDown_Click);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...