克隆控件 – C#(Winform)

可能重复:
可以复制某个控件的所有属性吗? (C#窗口forms)

我必须创建一些类似于作为设计时创建的控件的控件。 创建的控件应具有与预定义控件相同的属性,或者换句话说,我想复制控件。 那个目的是否有任何一行代码? 或者我必须通过一行代码设置每个属性? 我现在正在做的是:

ListContainer_Category3 = new FlowLayoutPanel(); ListContainer_Category3.Location = ListContainer_Category1.Location; ListContainer_Category3.BackColor = ListContainer_Category1.BackColor; ListContainer_Category3.Size = ListContainer_Category1.Size; ListContainer_Category3.AutoScroll = ListContainer_Category1.AutoScroll; 

一般来说,您可以使用reflection将对象的公共属性复制到新实例。

但是,在处理控件时,您需要谨慎。 某些属性(如WindowTarget)仅供框架基础结构使用; 所以你需要过滤掉它们。

完成过滤工作后,您可以编写所需的单行程序:

 Button button2 = button1.Clone(); 

这里有一些代码可以帮助您入门:

 public static class ControlExtensions { public static T Clone(this T controlToClone) where T : Control { PropertyInfo[] controlProperties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); T instance = Activator.CreateInstance(); foreach (PropertyInfo propInfo in controlProperties) { if (propInfo.CanWrite) { if(propInfo.Name != "WindowTarget") propInfo.SetValue(instance, propInfo.GetValue(controlToClone, null), null); } } return instance; } } 

当然,您仍然需要调整命名,位置等。也可以处理包含的控件。