我试图取消选中菜单中所有可检查的ToolStripMenuItem项目
foreach (ToolStripMenuItem item in filtersMenu.DropDownItems) { item.Checked = false; }
ToolStripMenuItem都可以检查,但问题是编译器给出了InvalidCastException,循环也试图对ToolStripSeparator项目进行操作,如何解决这个问题,任何帮助都将不胜感激,谢谢.
你可以使用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
-property属于该类型ToolStripItemCollection
.此集合包含该类型的项目ToolStripItem
.此外,如果你看一下两者的继承层次ToolStripMenuItem
和ToolStripSeparator
,你会看到他们都继承ToolStripItem
.
更多阅读:
ToolStripDropDownItem.DropDownItems属性
只需添加一个if语句来检查项目的类型:
foreach (ToolStripItem item in filtersMenu.DropDownItems) { // Move to next item if ToolStripSeparator if (item is ToolStripSeparator) continue; item.Checked = false; }