Controles de clonación – C # (Winform)

Posible duplicado:
¿Es posible copiar todas las propiedades de un cierto control? (Formas de ventana C #)

Tengo que crear algunos controles similares a un control creado como tiempo de diseño. El control creado debe tener las mismas propiedades que un control predefinido, o en otras palabras, quiero copiar un control. ¿Hay una sola línea de código para ese propósito? o tengo que configurar cada propiedad por una línea de código? Lo que estoy haciendo en este momento es:

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; 

En general, puede usar la reflexión para copiar las propiedades públicas de un objeto a una nueva instancia.

Sin embargo, cuando se trata de controles, debes ser precavido. Algunas propiedades, como WindowTarget, están destinadas a ser utilizadas solo por la infraestructura del marco; entonces necesitas filtrarlos.

Después de completar el trabajo de filtrado, puede escribir el diseño único deseado:

 Button button2 = button1.Clone(); 

Aquí hay un pequeño código para comenzar:

 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; } } 

Por supuesto, aún necesita ajustar la nomenclatura, la ubicación, etc. También puede manejar controles contenidos.