从父窗体MenuStrip中删除ToolStripMenuItem

时间:2017-01-13 14:24:20

标签: vb.net parent-child menustrip

我一直在做一个小项目,基本上它是一个父表单,里面有一个带Tab Controls的子表单。当我更改选项卡时,它会将该选项卡的相关选项添加到父菜单条。

我想做的是,而不是每次我更改标签时都会有新的选项'出现在菜单条上,因此在更改几个标签后,它会显示“选项”。 '选项' '选项' '选项'在菜单条上,但我宁愿从上一个选项卡中删除选项,只显示1个选项。

到目前为止,我在添加新选项之前删除选项的代码如下:

    Dim ParentForm As frmNavigation = frmNavigation

    Dim OptionsMenuStrip As MenuStrip = ParentForm.Controls("MenuStrip1")

    Dim Items As ToolStripItemCollection = OptionsMenuStrip.Items

    For Each Item As ToolStripMenuItem In Items
        If Item.Name = "OptionsMenu" Then
            Item.Dispose()
        End If
    Next

但是我收到了错误

'Collection was modified; enumeration operation may not execute.'

据我所知,基本上它是说收藏品会在阅读时改变它,我想?

我只是不知道解决方法

任何帮助实现我想要的东西将不胜感激。

我甚至可能完全错误地对待它,但我感觉如此接近!

谢谢你:)

1 个答案:

答案 0 :(得分:1)

您对此错误的解释是正确的。您可以将“要删除的”项目放在单独的列表中,然后Remove将它们放在其中:

    Dim ParentForm As frmNavigation = frmNavigation
    Dim OptionsMenuStrip As MenuStrip = ParentForm.Controls("MenuStrip1")
    Dim Items As ToolStripItemCollection = OptionsMenuStrip.Items
    Dim removeThese As New List(Of ToolStripMenuItem)

    For Each Item As ToolStripMenuItem In Items
        If Item.Name = "OptionsMenu" Then
            removeThese.Add(Item)
        End If
    Next

    For Each item In removeThese
        Items.Remove(item)
        item.Dispose()
    Next

请注意,ToolStripMenuItem已从ToolStripItemCollection 中删除,然后被移除。