2014-09-03 59 views
1

我有一個表單應該迭代列表,併爲列表中的每個項目添加選項卡到選項卡控件。然後,我有一個組框,應該被添加到每個標籤。C#WinForms,將選項卡添加到選項卡控件,然後以編程方式將控件添加到每個選項卡

標籤添加得很好,但組框僅添加到最後一個標籤(也是調試器顯示每個標籤的Controls集合都是空的,除了最後一個標籤)。

任何見解?

foreach (String company in requiredGasComps) 
{ 
    tabCont.TabPages.Add(company,company);  
} 

foreach (TabPage tabpage in tabCont.TabPages) 
{ 
    tabpage.Controls.Add(groupBox); 
} 


foreach (TabPage tabpage in tabCont.TabPages) 
{ 
    Control [] a = tabpage.Controls.Find("currentSupplier95",true); 

    //Will always find 0 or 1 control 
    if (a.Length > 0) 
    { 
     a[0].Text = tabpage.Text; 
    } 
} 

this.Controls.Add(tabCont); 
+0

Yah,當然,一個控件只能有*一個* Parent。最後一場勝利。 – 2014-09-03 09:21:42

回答

0

感謝所有新的組框,我結束了創建一個用戶控件,然後

foreach (TabPage tabpage in tabCont.TabPages) 
{ 
    EnergyTable table = new EnergyTable(); 
    tabpage.Controls.Add(table); 
} 

工程就像一個魅力。

1

我想你會在每個Tabpage上放置相同的組框。試試:

foreach (TabPage tabpage in tabCont.TabPages) 
{ 
    GroupBox groupBox = new GroupBox(); 
    tabpage.Controls.Add(groupBox); 
} 
+0

謝謝,我在想同樣的事情。事情是這個groupbox包含一個面板和許多標籤。 我認爲最好的辦法是創建我自己的控制,然後我將能夠複製它。 – DeepSpace 2014-09-03 09:22:08

+0

那麼使用一個foreach循環來把控件放在新的GroupBox中 – HeadShotSmiley 2014-09-03 09:28:34

+0

GroupBox groupBox1 = new GroupBox(); foreach(控件c在groupBox.Controls中) { groupBox1.Add(c); } tabpage.Controls.Add(groupBox1); – HeadShotSmiley 2014-09-03 09:36:07

1

控件只能屬於一個集合,或者換句話說 - 只能有一個父集。因此,您無法將相同的GroupBox添加到多個選項卡,您必須創建不同的GroupBox實例,然後將它們添加到選項卡。

1

我會建議修改你的代碼來創建一個標籤頁添加,然後你可以在同一時間

foreach (String company in requiredGasComps) 
{ 
    TabPage t = new TabPage(){Name = company, Text = company}; 
    Groupbox gb = groupBox.CreateNewBasedFromThis(); 
    t.Controls.Add(gb); 
    tabCont.TabPages.Add(t);  
} 

這也將是更有效的添加組框,因爲你不必重複兩次

您可以創建一個擴展方法過於創建基於關閉舊的

public static GroupBox CreateNewBasedFromThis(this GroupBox gb) 
{ 
    var newGb = new GroupBox; 
    //set new properties that you wish to copy 
    return newGb; 
} 
相關問題