清除ContextMenu中的所有项目

时间:2013-12-27 13:08:46

标签: .net winforms contextmenu

我正在尝试通过删除所有项目并重新添加新项目来刷新ContextMenu控件中的项目列表。我遍历所有项目以取消挂起他们的Click事件并处理它们,然后我清除列表,如下所示:

var menuItems = rightClickMenu.MenuItems;
foreach (MenuItem menuItem in menuItems)
{
    menuItem.Click -= menuItem_Click;
    menuItem.Dispose();
}
menuItems.Clear();

但是当我这样做时,会移除一些项目,但是我会以null获得menuItem,即使我100%确定该集合不包含任何空值。发生了什么事?

1 个答案:

答案 0 :(得分:2)

您正在修改foreach循环中的集合,这是不允许的。而是创建一个集合的副本并处理它。

var menuItems = rightClickMenu.MenuItems.Cast<MenuItem>().ToArray();
foreach (MenuItem menuItem in menuItems)
{
    menuItem.Click -= menuItem_Click;
    menuItem.Dispose();
}
rightClickMenu.MenuItems.Clear();