Copy TabControl Tab

后端 未结 3 424
别那么骄傲
别那么骄傲 2020-12-10 16:21

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

相关标签:
3条回答
  • 2020-12-10 16:46

    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

    0 讨论(0)
  • 2020-12-10 16:54

    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);
    
    0 讨论(0)
  • 2020-12-10 16:57

    Your best bet would be to look at this article:

    Code Project

    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.

    0 讨论(0)
提交回复
热议问题