Paramu1973 Ответов: 2

Как изменить toolstripdropdownbutton.dropdwonitems динамически?


Привет,
У меня есть небольшой проект с toolstripmenuitem. Я хочу удалить toolstripmenuitem во время form_pageLoad()...это возможно?

мой код
<pre>for each(ToolStripMenuItem dropDownItem in reportstoolStripDropDownButton.DropDownItems) {
if (dropDownItem.Name == MyTable.Rows[M1]["report_menu_name"].ToString()) {
   //MessageBox.Show(dropDownItem.Name);
   reportstoolStripDropDownButton.DropDownItems.Remove(dropDownItem);
}
}

сообщение об ошибке:

Invalid OperationException was unhandled - Collection was modified : Enumeration Operation may not execute

Спасибо за помощь

Что я уже пробовал:

Попытался удалить toolstripmenuitem программно

2 Ответов

Рейтинг:
14

Richard Deeming

Вам нужно будет удалить этот предмет из внешнего мира. foreach петля. Например:

string nameToFind = MyTable.Rows[M1]["report_menu_name"].ToString();
List<ToolStripMenuItem> itemsToRemove = new List<ToolStripMenuItem>();

foreach (ToolStripMenuItem dropDownItem in reportstoolStripDropDownButton.DropDownItems)
{
    if (dropDownItem.Name == nameToFind)
    {
        itemsToRemove.Add(dropDownItem);
    }
}

foreach (ToolStripMenuItem dropDownItem in itemsToRemove)
{
    reportstoolStripDropDownButton.DropDownItems.Remove(dropDownItem);
}


BillWoodruff

Вы можете использовать гипс здесь, чтобы избежать двух петель. Я бы не стал использовать итерацию (см. мой код ниже).

Рейтинг:
1

BillWoodruff

Другой подход: я намеренно использовал несколько проверок допустимых имен; в производственном коде я бы использовал try/catch.

private void RemoveDDownMenuItem(MenuStrip mnuStrip, string menuItemName, string ddownMenuItemName)
{
    if (! mnuStrip.Items.ContainsKey(menuItemName))
    {
        // throw error ?
        return;
    }

    ToolStripItem menu = mnuStrip.Items[menuItemName];

    if(! (menu is ToolStripMenuItem))
    {
        // throw error ?
        return;
    }

    ToolStripMenuItem tsmenu = (ToolStripMenuItem) menu;

    if (! tsmenu.HasDropDown)
    {
        // throw error ?
        return;
    }

    if (! tsmenu.DropDownItems.ContainsKey(ddownMenuItemName))
    {
        // throw error ?
        return;
    }
    
    tsmenu.DropDownItems.Remove(tsmenu.DropDownItems[ddownMenuItemName]);
}