English 中文(简体)
Deeply cloned Panel; controls don t redraw
原标题:

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)
{
    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;
}
最佳回答

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.

问题回答

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.





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签