当我单击另一个菜单项时,我想取消选中MenuStrip中主ToolStripMenuItem(称为MyMainMenu)的所有菜单项。主菜单包含一些菜单项和一个分隔符。我尝试了以下代码:
Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
MnuItem.Checked = True
For Each Mnu As ToolStripMenuItem In Me.MyMainMenu.DropDownItems
If Not Mnu Is MnuItem Then
Mnu.Checked = False
End If
Next
End Sub
我从每个菜单项(分隔符除外)中调用该代码。当我单击菜单项时,程序崩溃,提示他无法将其从ToolStripSeparator强制转换为ToolStripMenuItem。出于相同目的,可以在Microsoft .NET文档站点上找到相同的代码,但是如果同一菜单项包含不同种类的项(分隔符,文本框...),则未指定可以执行的操作。
你知道我该如何解决这个问题?
谢谢,
再见
您的代码假定DropDownItems
仅返回Type的项目ToolStripmenuItem
,但实际上它返回的是ToolstripItemCollection
因此,您需要额外检查以确保仅使用您感兴趣的类型:
Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
MnuItem.Checked = True
For Each item In Me.MyMainMenu.DropDownItems
If TypeOf item Is ToolStripMenuItem Then
Dim mnu = CType(item, ToolStripMenuItem)
If Not mnu Is MnuItem Then
mnu.Checked = False
End If
End If
Next
End Sub
不过,可能更好的选择是过滤原始集合以仅返回特定类型的对象:
Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
MnuItem.Checked = True
For Each mnu In Me.MyMainMenu.DropDownItems.OfType(Of ToolStripMenuItem)
If Not mnu Is MnuItem Then
mnu.Checked = False
End If
Next
End Sub
请注意,您可以进一步简化例程,以仅检查传入的项目:
Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
For Each mnu In Me.MyMainMenu.DropDownItems.OfType(Of ToolStripMenuItem)
mnu.Checked = (mnu Is MnuItem)
Next
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句