Vb.net ToolStripMenueParator防止以编程方式禁用/启用ToolStripMenuItems
例如,我使用下面这部分代码来禁用标记为M2的ToolStripMenuItems。问题在于,代码在满足第一个ToolStripMenuSeparator之前一直有效。即使ToolStripMenueParator下的ToolStripMenuItems将M2作为标记,仍保持启用状态。如果我手动删除ToolStripMenuSeparator,一切正常!!!如果菜单项之间有分隔符,有什么区别吗Vb.net ToolStripMenueParator防止以编程方式禁用/启用ToolStripMenuItems,vb.net,Vb.net,例如,我使用下面这部分代码来禁用标记为M2的ToolStripMenuItems。问题在于,代码在满足第一个ToolStripMenuSeparator之前一直有效。即使ToolStripMenueParator下的ToolStripMenuItems将M2作为标记,仍保持启用状态。如果我手动删除ToolStripMenuSeparator,一切正常!!!如果菜单项之间有分隔符,有什么区别吗 Dim MenuItem As ToolStripMenuItem For Each MenuI
Dim MenuItem As ToolStripMenuItem
For Each MenuItem In MainForm_MenuStrip.Items
If (MenuItem.GetType() Is GetType(ToolStripMenuItem)) Then
Dim MenuSubItem As ToolStripMenuItem
For Each MenuSubItem In MenuItem.DropDownItems
If (MenuSubItem.GetType() Is GetType(ToolStripMenuItem)) And MenuSubItem.Tag = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next
主要问题是ToolStripSeparator无法强制转换为ToolStripMenuItem。
因此,当循环到达ToolStripSeparator时,以下行将抛出InvalidCastException:
如果您改为强制转换为ToolStripItem,它将正常工作。
此外,应该将MenuItem定义为Object,否则一旦菜单中出现ToolStripTextbox或ToolStripCombobox,代码就会失败。此外,GetType部件也可以替换为TypeOf
本例使用后期绑定。
以下内容也适用于Option Strict On:
For Each MenuSubItem In MenuItem.DropDownItems
For Each MenuItem As Object In Mainform_MenuStrip.Items
If TypeOf MenuItem Is ToolStripMenuItem Then
For Each MenuSubItem As ToolStripItem In MenuItem.DropDownItems
If TypeOf MenuSubItem Is ToolStripMenuItem AndAlso MenuSubItem.Tag = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next
For Each MenuItem As ToolStripItem In Mainform_MenuStrip.Items
If TypeOf MenuItem Is ToolStripMenuItem Then
For Each MenuSubItem As ToolStripItem In DirectCast(MenuItem, ToolStripMenuItem).DropDownItems
If TypeOf MenuSubItem Is ToolStripMenuItem AndAlso CStr(MenuSubItem.Tag) = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next