imd*_*ose -1 c# winforms drop-down-menu
我试图取消选中菜单中所有可检查的ToolStripMenuItem项目
foreach (ToolStripMenuItem item in filtersMenu.DropDownItems)
{
item.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)
ToolStripMenuItem都可以检查,但问题是编译器给出了InvalidCastException,循环也试图对ToolStripSeparator项目进行操作,如何解决这个问题,任何帮助都将不胜感激,谢谢.
只需添加一个if语句来检查项目的类型:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
// Move to next item if ToolStripSeparator
if (item is ToolStripSeparator)
continue;
item.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)
你可以使用RononDex的答案,这是非常好的.你也可以这样说:
foreach(ToolStripMenuItem item in filtersMenu.DropDownItems.OfType<ToolStripMenuItem>())
{
item.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错的话,RononDex的代码应该可以修改为这个(使用ToolStripItem而不是 ToolStripMenuItem:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
if (item is ToolStripSeparator)
continue;
item.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)
而且有点短:
foreach (ToolStripItem item in filtersMenu.DropDownItems)
{
if (item is ToolStripMenuItem)
item.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)
这将起作用,因为DropDownItems-property属于该类型ToolStripItemCollection.此集合包含该类型的项目ToolStripItem.此外,如果你看一下两者的继承层次ToolStripMenuItem和ToolStripSeparator,你会看到他们都继承ToolStripItem.
更多阅读: