我在重绘克隆面板的子控件时遇到问题。
首先,我没有使用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;
}
答案 0 :(得分:1)
对于第二个问题,请添加对System.Design的引用。 然后将[Designer(typeof( ParentControlDesigner)]属性添加到您的用户控件中。这将使其在设计时像一个面板控件。
答案 1 :(得分:-1)
所以,我通过使用UserControl而不是Panel来解决它,结果证明它更好。
我唯一想要的是,不仅要在其特定的设计器中设计UserControl控件,还要在Form本身中设计。但这不是问题,我可以忍受。