2009-11-21 5 views
0

У меня проблемы с перерисовкой дочерних элементов управления клонированной панелью.Глубоко клонированная панель; элементы управления не перерисовываются

Во-первых, Я не использую IClonable. Я использую отражение.

Мой код:

public static Panel ClonePanel(Panel panel) 
{ 
    Panel newPanel = (Panel) CloneControl(panel); 

    foreach (Control ctl in panel.Controls) 
    { 
     Control newCtl = CloneControl(ctl); 
     newCtl.Visible = true; 

     newPanel.Controls.Add(newCtl); 
    } 

    newPanel.Visible = true; 

    return newPanel; 
} 

public static Control CloneControl(Control o) 
{ 
    Type type = o.GetType(); 
    PropertyInfo[] properties = type.GetProperties(); 
    Control retObject = (Control) type.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null); 
    foreach (PropertyInfo propertyInfo in properties) 
    { 
     if (propertyInfo.CanWrite) 
     { 
      propertyInfo.SetValue(retObject, propertyInfo.GetValue(o, null), null); 
     } 
    } 
    return retObject; 
} 

ответ

-1

Итак, я решил его с помощью UserControl вместо панели, которая оказалась намного лучше.

Единственное, что я хотел бы иметь, - это проектирование элементов управления UserControl не только в его конкретном дизайнере, но и в самой форме. Но это не проблема, я могу жить с этим.

1

Для вашей второй проблемы добавьте ссылку на System.Design. Затем добавьте к вашему пользовательскому элементу атрибут [Deisgner (type12)()]. Это позволит ему действовать как управление панелью во время разработки.

 Смежные вопросы

  • Нет связанных вопросов^_^