可能的重复:
是否可以复制某个控件的所有属性? (C# 窗口窗体)
我必须创建一些类似于设计时创建的控件的控件。创建的控件应该具有与预定义控件相同的属性,或者换句话说,我想复制一个控件。有没有一行代码可以达到这个目的?或者我必须通过一行代码设置每个属性?
我现在正在做的是:
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;
一般来说,您可以使用反射将对象的公共属性复制到新实例。
然而,在处理控件时,您需要小心。某些属性(例如 WindowTarget)只能由框架基础结构使用;所以你需要将它们过滤掉。
过滤工作完成后,您可以编写所需的一行代码:
Button button2 = button1.Clone();
这里有一些代码可以帮助您入门:
public static class ControlExtensions
{
public static T Clone<T>(this T controlToClone)
where T : Control
{
PropertyInfo[] controlProperties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
T instance = Activator.CreateInstance<T>();
foreach (PropertyInfo propInfo in controlProperties)
{
if (propInfo.CanWrite)
{
if(propInfo.Name != "WindowTarget")
propInfo.SetValue(instance, propInfo.GetValue(controlToClone, null), null);
}
}
return instance;
}
}
当然,您仍然需要调整命名、位置等。也许还需要处理包含的控件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)