我尝试深入复制ToolStripMenuItems以将副本添加到不同的其他ToolStripMenu。有没有办法深入复制Winforms控件?
当我试图序列它返回Nothing(4号线在下面的代码)并没有作出这样的ToolStripMenuItem的新实例的ToolStripMenuItem。
Public Module Extensions
<System.Runtime.CompilerServices.Extension()> _
Public Function DeepCopy(Of T)(ByVal Obj As T) As T
If Obj.GetType().IsSerializable = False Then Return Nothing
Using MStream As New MemoryStream
Dim Formatter As New BinaryFormatter
Formatter.Serialize(MStream, Obj)
MStream.Position = 0
Return DirectCast(Formatter.Deserialize(MStream), T)
End Using
End Function
End Module
我的副本
Dim tsmiCopy As ToolStripMenuItem = tsmiOriginal.DeepCopy()
这是这一行:'如果Obj.GetType()IsSerializable = false,那么返回Nothing'返回'Nothing'。如果您要删除该行,您将得到一个异常,指出组件不可序列化。 –
查看您的designer.cs文件的代码。只需复制这些代码并将它们放入方法中,并在需要工具条的克隆副本时调用该方法,请参阅@SuperPeanut答案。 –