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 |