Copy TabControl Tab
Solution 1
EDIT
I have rewritten my solution to use reflection.
using System.Reflection;
// your TabControl will be defined in your designer
TabControl tc;
// as will your original TabPage
TabPage tpOld = tc.SelectedTab;
TabPage tpNew = new TabPage();
foreach(Control c in tpOld.Controls)
{
Control cNew = (Control) Activator.CreateInstance(c.GetType());
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(c);
foreach (PropertyDescriptor entry in pdc)
{
object val = entry.GetValue(c);
entry.SetValue(cNew, val);
}
// add control to new TabPage
tpNew.Controls.Add(cNew);
}
tc.TabPages.Add(tpNew);
Some information can be found here. http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms
Solution 2
Your best bet would be to look at this article:
Then apply the following code to add the cloned control (this would be in your button click handler code (based on article):
private void button1_Click(object sender, EventArgs e)
{
// create new tab
TabPage tp = new TabPage();
// iterate through each control and clone it
foreach (Control c in this.tabControl1.TabPages[0].Controls)
{
// clone control (this references the code project download ControlFactory.cs)
Control ctrl = CtrlCloneTst.ControlFactory.CloneCtrl(c);
// now add it to the new tab
tp.Controls.Add(ctrl);
// set bounds to size and position
ctrl.SetBounds(c.Bounds.X, c.Bounds.Y, c.Bounds.Width, c.Bounds.Height);
}
// now add tab page
this.tabControl1.TabPages.Add(tp);
}
Then you would need to hook the event handlers up. Will have to think about this.
Solution 3
I know it's an old thread but I just figured out a way for myself and thought I should share it. It's really simple and tested in .Net 4.6.
Please note that this solution does not actually create new controls, just re-assigns them all to new TabPage, so you have to use AddRange each time you change tabs. New tab will show the exact same controls, content and values included.
// Create an array and copy controls from first tab to it.
Array tabLayout = new Control [numberOfControls];
YourTabControl.TabPages[0].Controls.CopyTo(tabLayout, 0);
// AddRange each time you change a tab.
YourTabControl.TabPages[newTabIndex].Controls.AddRange((Control[])tabLayout);
Dozer789
Updated on June 15, 2022Comments
-
Dozer789 almost 2 years
I searched the internet for this but i couldn't find how to do it with C#
What i am trying to do is make it so that when i click on my
NewTab
button, a new tab appears with the same controls that were on the first tab. I saw some information on how to add aUserControl
to your form, but C# doesn't have anything like that.And for everyone who would say "Post your code", i don't have any, so don't bother saying that, the only code i have is the code for the program and that wouldn't help anyone.
-
Dozer789 over 11 yearsand where do i put that code? in the "New Tab" button click, or in the
public Form1()
? -
Andez over 11 yearsWould just move the controls from one tab to the other?
-
Manish over 11 yearsIterate through the controls of the template TabPage and make clone and then add to the new TabPage; otherwise if you add the control without cloning it will simply move the controls from one TabPage to other.
-
Dozer789 over 11 yearsI added this to my "New Tab Button" and it does nothing.
-
Andez over 11 yearsI've edited solution - make sure you download code from there.
-
Dozer789 over 11 yearsThat works, accept that when i do that, the controls on the other tab that i just added are useless, i can't click them and when i change tabs, where the controls were it is just completely white. Any way to fix that?