469,349 Members | 1,624 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,349 developers. It's quick & easy.

How to clone a "Control"

Does anyone know how to do this accurately. I really only want to clone the
design-time properties which should make the task easier. I've searched high
and low however and still can't find a problem-free solution. Even (ad-hoc)
solutions posted by MSFT employees have problems. For instance, if you
simply copy all serializable properties, you may eventually receive an
"Object does not match target type" exception. In my case, this occurs when
I encounter (and clone) the "Location" property due to the fact that the
"Site" property was cloned earlier. If I clone "Location" first however
(before "Site"), it works fine. There must be a clean way to do this. Can
anyone offer any insight. Thanks.
Feb 22 '07 #1
3 43439
You can create the control using the designer, then copy the code and
remove the control, and then you can put the code in the code window and
create the control exactly the same way every time. Would that work for
you?
Robin S.
-------------------------------
"Rob Stevenson" <no_spam@_nospam.comwrote in message
news:%2***************@TK2MSFTNGP06.phx.gbl...
Does anyone know how to do this accurately. I really only want to clone
the design-time properties which should make the task easier. I've
searched high and low however and still can't find a problem-free
solution. Even (ad-hoc) solutions posted by MSFT employees have problems.
For instance, if you simply copy all serializable properties, you may
eventually receive an "Object does not match target type" exception. In
my case, this occurs when I encounter (and clone) the "Location" property
due to the fact that the "Site" property was cloned earlier. If I clone
"Location" first however (before "Site"), it works fine. There must be a
clean way to do this. Can anyone offer any insight. Thanks.

Feb 22 '07 #2
You can create the control using the designer, then copy the code and
remove the control, and then you can put the code in the code window and
create the control exactly the same way every time. Would that work for
you?
Thanks. I wish it were that easy however :) This is being done at runtime on
a machine where VS isn't even installed. I need to generically clone an
arbitrary control that I'm not familiar with ahead of time. A clone function
taking a "Control" argument and returning the cloned control is what I'm
after.
Feb 22 '07 #3
Hi Rob,

There may be better ways, but this may work

private void button1_Click(object sender, EventArgs e)
{
TextBox t = (TextBox)CloneObject(textBox1);
}

private object CloneObject(object o)
{
Type t = o.GetType();
PropertyInfo[] properties = t.GetProperties();

Object p = t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null);

foreach(PropertyInfo pi in properties)
{
if(pi.CanWrite)
{
pi.SetValue(p, pi.GetValue(o, null), null);
}
}

return p;
}

This code should create a new object of the same type and any writable property will get their values copied.
There may be far better ways though.
On Thu, 22 Feb 2007 02:37:56 +0100, Rob Stevenson <no_spam@_nospam.comwrote:
Does anyone know how to do this accurately. I really only want to clone the
design-time properties which should make the task easier. I've searched high
and low however and still can't find a problem-free solution. Even (ad-hoc)
solutions posted by MSFT employees have problems. For instance, if you
simply copy all serializable properties, you may eventually receive an
"Object does not match target type" exception. In my case, this occurswhen
I encounter (and clone) the "Location" property due to the fact that the
"Site" property was cloned earlier. If I clone "Location" first however
(before "Site"), it works fine. There must be a clean way to do this. Can
anyone offer any insight. Thanks.


--
Happy coding!
Morten Wennevik [C# MVP]
Feb 22 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

43 posts views Thread by steve | last post: by
4 posts views Thread by Randall Arnold | last post: by
1 post views Thread by Kevin L | last post: by
2 posts views Thread by Angus | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.