簡體   English   中英

復制TabControl選項卡

[英]Copy TabControl Tab

我在互聯網上搜索了這個,但我找不到如何用C#做到這一點

我想要做的就是這樣,當我點擊我的NewTab按鈕時,會出現一個新選項卡,其中包含第一個選項卡上的相同控件。 我看到了一些關於如何向表單添加UserControl信息,但C#沒有這樣的東西。

對於每個會說“發布你的代碼”的人,我都沒有,所以不要說這個,我唯一的代碼是程序的代碼,這對任何人都無濟於事。

編輯

我已經重寫了我的解決方案以使用反射。

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);

有些信息可以在這里找到。 http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms

你最好的選擇是看看這篇文章:

代碼項目

然后應用以下代碼添加克隆控件(這將在您的按鈕單擊處理程序代碼中(基於文章):

    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);
    }

然后你需要掛鈎事件處理程序。 將不得不考慮這一點。

我知道這是一個老線程,但我只是為自己想辦法,並認為我應該分享它。 它非常簡單並且在.Net 4.6中進行了測試。

請注意,此解決方案實際上並不創建新控件,只是將它們全部重新分配給新的TabPage,因此每次更改選項卡時都必須使用AddRange。 新選項卡將顯示完全相同的控件,內容和值。

// 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM