一般来说,您可以使用反射将对象的公共属性复制到新实例。
然而,在处理控件时,您需要谨慎。有些属性,如WindowTarget,只供框架基础结构使用;因此您需要过滤掉它们。
过滤工作完成后,您可以编写所需的一行:
代码语言:javascript运行复制Button button2 = button1.Clone();下面是一个让你开始的小代码:
代码语言:javascript运行复制public static class ControlExtensions
{
public static T Clone
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;
}
}当然,您还需要调整命名、位置等,也可能需要处理包含的控件。
