我正在尝试取消选中菜单中所有可检查的ToolStripMenuItem项目
foreach (ToolStripMenuItem item in filtersMenu.DropDownItems)
{
item.Checked = false;
}
ToolStripMenuItem都可以检查,但问题是编译器给出了InvalidCastException,循环也试图对ToolStripSeparator项进行操作,我该如何解决这个问题,感谢任何帮助。
答案 0 :(得分:6)
只需添加一个检查项目类型的if语句:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
// Move to next item if ToolStripSeparator
if (item is ToolStripSeparator)
continue;
item.Checked = false;
}
答案 1 :(得分:5)
你可以使用RononDex的答案,这是非常好的。你也可以这样说:
foreach(ToolStripMenuItem item in filtersMenu.DropDownItems.OfType<ToolStripMenuItem>())
{
item.Checked = false;
}
如果我没弄错的话,RononDex的代码应该可以修改为使用{使用ToolStripItem
代替ToolStripMenuItem
:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
if (item is ToolStripSeparator)
continue;
item.Checked = false;
}
又短一点:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
if (item is ToolStripMenuItem)
item.Checked = false;
}
这将有效,因为DropDownItems
- 属性属于ToolStripItemCollection
类型。此集合包含ToolStripItem
类型的项目。此外,如果您查看ToolStripMenuItem
和ToolStripSeparator
的继承层次结构,您将看到它们都继承自ToolStripItem
。
更多阅读: