2017-01-13 2 views
2

J'ai travaillé sur un petit projet et, fondamentalement, il s'agit d'un formulaire parent qui a un enfant avec des contrôles onglet à l'intérieur. Lorsque je change d'onglet, il ajoute les options pertinentes pour cet onglet à la bande de menu des parents. Ce que je voudrais faire est, au lieu de chaque fois que je change d'onglet une nouvelle 'Options' apparaît sur la bande de menu, donc après quelques changements d'onglet il a 'Options' 'Options' 'Options' 'Options' sur la bande de menu, mais je préfère supprimer les options de l'onglet précédent et seulement les 1 options affichées.Supprimer ToolStripMenuItem à partir de formulaires parent MenuStrip

Le code que j'ai à ce jour pour supprimer les options avant d'ajouter de nouvelles est comme suit:

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 

mais je reçois l'erreur

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

Ce que je comprends est, fondamentalement, il dit la collections qui le change pendant qu'il est lu, je pense?

Je ne sais pas un moyen de contourner

Toute aide pour obtenir ce que je veux serait grandement apprécié.

Je peux même aller tout à fait dans le mauvais sens à ce sujet mais je me sens si proche!

Merci vous :)

Répondre

0

Votre interprétation de cette erreur est correcte. Vous pouvez mettre les « à supprimer » éléments dans une liste séparée et Remove eux par la suite:

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 

Notez que ToolStripMenuItem est retirée du ToolStripItemCollection puis disposé.

+0

J'ai eu (à partir de tentatives de recherche précédentes) rencontré cette méthode, mais je ne pouvais pas tout à fait le faire fonctionner, mais je vais essayer votre code. Cela semble être la bonne façon de le faire. Je vais l'essayer maintenant. – DIMPeteAsUsername

+0

Merci beaucoup, parfait. – DIMPeteAsUsername