1. 主页 > 史诗殿堂 >

克隆控件

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

然而,在处理控件时,您需要谨慎。有些属性,如WindowTarget,只供框架基础结构使用;因此您需要过滤掉它们。

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

代码语言:javascript运行复制Button button2 = button1.Clone();下面是一个让你开始的小代码:

代码语言:javascript运行复制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;

}

}当然,您还需要调整命名、位置等,也可能需要处理包含的控件。