удалить ToolStripMenuItem из родительских форм MenuStrip

Я работаю над небольшим проектом, и в основном это родительская форма, в которой есть дочерний элемент с элементами управления вкладками внутри. Когда я меняю вкладку, она добавляет соответствующие параметры для этой вкладки в полосу меню родителей.

Что я хотел бы сделать, так это то, что каждый раз, когда я меняю вкладку, в полосе меню появляется новая «Параметры», поэтому после нескольких изменений вкладок в полосе меню есть «Параметры», «Параметры», «Параметры», «Параметры». , но я бы предпочел удалить параметры с предыдущей вкладки и отображать только 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.'

Как я понимаю, в основном это говорит о том, что коллекции меняют его во время чтения, я думаю?

Я просто не знаю, как это обойти.

Любая помощь в достижении того, что я хочу, будет принята с благодарностью.

Возможно, я даже иду совершенно неверным путем, но я чувствую себя так близко!

Спасибо :)


person Pete    schedule 13.01.2017    source источник


Ответы (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, затем удаляется.

person dummy    schedule 13.01.2017
comment
Я (из предыдущих попыток поиска) наткнулся на этот метод, но не смог заставить его работать, но я попробую ваш код. Это кажется правильным способом сделать это. Я попробую сейчас. - person Pete; 13.01.2017
comment
Большое спасибо, Перфект. - person Pete; 13.01.2017