最近自己写一个tabcontrol控件,需要通过复制其中的一个panel模板来生成一个个tabcontrol选项卡,但是由于c#的传引用赋值机制,导致复制时出现一些问题。
如:
Panel p=new Panel();
p=paneltemplate;
p.Location=new Point(0,0);
this.controls.Add(p);
这样你会发现,其实并没有新建了一个panel,而只是把paneltemplate的Location改变了一下,因为p=paneltemplate这一句只是把p指向了paneltemplate指向的内容。
解决办法:
(1)把paneltemplate作为一个单独的usercontrol类,然后一个一个地new出控件。
(2)如果该控件有Clone方法,则可直接用之。
(3)自写深度复制成员函数
(4)通过反射,获取属性等信息。生成序列化自定义类,再传递实现反序列化。