Как полностью копировать контрол winForms?

Рейтинг: 1Ответов: 1Опубликовано: 23.02.2011

То есть имеется собственный контрол, наследуемый от класса Control. Нужно создать несколько его копий, именно копий, а не ссылок на него. Т.к. надо каждый из них поместить на разные панели.

Ответы

▲ 3

Примерно так:

void Copy(Control source, Control destination)
{
  var pdc = TypeDescriptor.GetProperties(source);

  // Копируем значения всех свойств
  foreach(PropertyDescriptor pd in pdc)
  {
    if (!pd.IsReadOnly)
      pd.SetValue(destination, pd.GetValue(source));
  }

  // Создаём копии вложенных контролов и копируем содержания
  foreach (Control ctrl in source.Controls)
  {
    var ctrl2 = (Control)Activator.CreateInstance(ctrl.GetType());
    Copy(ctrl, ctrl2);
    ctrl2.Visible = true;
    destination.Controls.Add(ctrl2);
  }
}