menuitem 对象一次只能是一个菜单中的一项。通过调用该Add
函数,您可以将 menuitem 对象分配给另一个菜单。您不是在创建新对象。
ToolStripItemCollection的方法Add
调用该ToolStripItemCollection.SetOwner
方法以用新所有者(您的上下文菜单)替换工具条的最后所有者(您的菜单条)
来自System.Windows.Forms
:
Public Function Add(value As ToolStripItem) As Integer
Me.CheckCanAddOrInsertItem(value)
Me.SetOwner(value)
Dim result As Integer = AddressOf MyBase.InnerList.Add(value)
If Me.itemsCollection AndAlso Me.owner IsNot Nothing Then
Me.owner.OnItemAdded(New ToolStripItemEventArgs(value))
End If
Return result
End Function
Private Sub SetOwner(item As ToolStripItem)
If Me.itemsCollection AndAlso item IsNot Nothing Then
If AddressOf item.Owner IsNot Nothing Then
AddressOf AddressOf item.Owner.Items.Remove(item)
End If
item.SetOwner(Me.owner)
If AddressOf item.Renderer IsNot Nothing Then
AddressOf item.Renderer.InitializeItem(item)
End If
End If
End Sub
您可以看到该项目已从最后一个菜单中删除并添加了新菜单。
所以,你可以做什么?
ToolStripMenuItem 不实现 IClonable。
您需要做的是实例化一个新对象
Dim NewItem as New ToolStripMenuItem
With NewItem
.Text = MenuEditElement.Text
.Image = MenuEditElement.Image
'Rinse repeat for other important properties
End With
现在您还需要连接事件
AddHandler NewItem.Click, AddressOf HandleEditClicked 'Replace with the method that handles MenuEditItem.Clicked
然后将此项目添加到您的上下文菜单而不是原始项目
CM.Items.Add(NewItem)
这将创建一个外观和工作方式与 MenuEditItem 相同的新项目,然后将其放置在 ContextMenuStrip