开发者

Deeply cloned Panel; controls don't redraw

开发者 https://www.devze.com 2022-12-11 22:48 出处:网络
I have problems with redrawing child controls of cloned panel. First, I\'m not using IClonable. I\'m using reflection.

I have problems with redrawing child controls of cloned panel.

First, I'm not using IClonable. I'm using reflection.

My code:

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)
{开发者_StackOverflow社区
    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;
}


For your second issue, add a reference to System.Design. Then add the [Deisgner(typeof( ParentControlDesigner)] attribute to your user control. That will let it act like a panel control at design time.


So, I solved it by using UserControl instead of Panel, which turned out to be much, much better.

The only thing I would like to have additionally, is designing UserControl controls not only in its specific designer, but also in Form itself. But it's not a problem, I can live with that.

0

精彩评论

暂无评论...
验证码 换一张
取 消