vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
ContextMenuStrip1.Items.Remove erzeugt ein 'InvalidOperationsException' 
Autor: LarsThorwald
Datum: 18.02.07 12:04

Hallo zusammen,
ich habe ein Problem mit dem ContextMenuStrip, für welches ich auch eine Lösung gefunden habe, die mir aber letzten endes so nicht gefällt.

Ich möchte nach einem bestimmten Kriterium ToolStripMenuItems aus dem ContextMenuStrip entfernen. Dazu werte ich die Tag Eigenschaft aus. Die Entfernung der ToolStripMenuItems soll über eine Schleife geschehen. Das sähe dann so aus:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles MyBase.Load
 
    NotifyIcon1.ContextMenuStrip = ContextMenuStrip1
    NotifyIcon1.Icon = System.Drawing.SystemIcons.Information
 
    Dim tsp As New ToolStripMenuItem
 
    'Ohne TAG - Inhalt
    For a As Int32 = 0 To 4
      tsp = New ToolStripMenuItem
      tsp.Text = "Ohne Taginhalt " + a.ToString
      ContextMenuStrip1.Items.Add(tsp)
    Next
 
    'Mit TAG - Inhalt
    For b As Int32 = 0 To 4
      tsp = New ToolStripMenuItem
      tsp.Tag = "Eintag Nr. " & b.ToString
      tsp.Text = "Mit Taginhalt " + b.ToString
      ContextMenuStrip1.Items.Add(tsp)
    Next
 
  End Sub
 
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles Button1.Click
    'Beinhaltet ein ToolStripMenuItem.Tag ein Inhalt, so soll dieses aus
    'dem Menü entfernt werden
 
    For Each c As ToolStripMenuItem In ContextMenuStrip1.Items
      If CType(c.Tag, String) <> "" Then
        ContextMenuStrip1.Items.Remove(c)
      End If
    Next
 
  End Sub
Nach dem das erste ToolStripMenuItem entfernt wurde, erhalte ich die Fehlermeldung:
"InvalidOperationsException wurde nicht behandelt"
"Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden"

Ich gehe mal davon aus, daß das entfernen eines ToolStripMenuItem innerhalb dieser Schleife nicht an dieser Stelle For Each c As ToolStripMenuItem In ContextMenuStrip1.Items berücksichtigt wird.

Meine Lösung sieht wie folgt aus:
    Dim t As New System.Collections.Generic.List(Of ToolStripMenuItem)
 
    For Each c As ToolStripMenuItem In ContextMenuStrip1.Items
      If CType(c.Tag, String) <> "" Then
        t.Add(c)
      End If
    Next
 
    For Each tol As ToolStripMenuItem In t
      ContextMenuStrip1.Items.Remove(tol)
    Next
Kann man nicht direkt aus einer Schleife herraus die ToolStripMenuItems entfernen?

Gruß
Lars

Visual Basic Express 2010, C# Express 2010
Intel? i7 Core 920@2.63 Ghz, 6 GByte DDR3, 1024 MB ATI? Radeon? 5870, Windows 7 Prof. 64 Bit
Gibson SG 61' Reissue ; Ibanez Prestige RG 2550 E, Marshall Valvestate VS100 + Modell Vs412 (4 x 12''), Cubase Studio

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ContextMenuStrip1.Items.Remove erzeugt ein 'InvalidOperation...2.726LarsThorwald18.02.07 12:04
Re: ContextMenuStrip1.Items.Remove erzeugt ein 'InvalidOpera...1.090Drapondur18.02.07 18:48

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel