2012-09-27 72 views
0

我有一組標籤頁,我需要在運行時更改內容(控件)。頁面可能由組合框,文本框和標籤組成,我想用一個按鈕替換整個選項卡。我讀過的是,要做到這一點的方法是刪除標籤頁,而不是循環瀏覽頁面上的所有控件並設置其可見性,這根本不起作用。我有以下代碼:動態修改winform標籤頁

foreach (TabPage t in tabControl1.TabPages) 
{ 
    tabControl1.Controls.Remove(t); 
} 

newPanelButton = new Button(); 
newPanelButton.Text = "0% Complete"; 
newPanelButton.Location = new Point(117, 75); 
newPanelButton.Height = 80; 
newPanelButton.Width = 200; 

TabPage tabPage = new TabPage(); 
tabPage.Controls.Add(newPanelButton); 

tabControl1.Controls.Add(tabPage);    

Refresh(); 

該代碼有沒有任何影響,因爲如果它甚至不存在。現有的控件和頁面根本不會改變。我錯過了什麼?

+0

是否檢查被實際執行這個代碼? – waldrumpus

+1

爲什麼要使用'tabControl1.TabPages.Remove(t);'刪除標籤頁,並添加一個tabpage爲'tabControl1.Controls.Add(tabPage);'?保持添加/刪除tabpage同步的方法,將是我的第一個建議。 – Maarten

+0

是的代碼正在執行。如果我不刪除標籤頁,那麼更改標籤頁內容的方法是什麼? – Gary

回答

0

tabControl1.Controls.Add(tabPage);

應該

tabControl1.TabPages.Add(tabPage);

+0

我忘記了爲什麼我放棄了SO - 感謝提醒傢伙... –

+0

這沒有什麼區別。所有現有的控件都保留在頁面上,沒有任何變化。我也嘗試將頁面上所有控件的可見性設置爲false。這也無能爲力。 – Gary

0

您應該刪除/使用TabControl.TabPages財產/添加頁面到您的tabcontrol。

你的代碼應該(我在這裏和那裏縮短它):

tabControl1.TabPages.Clear(); 

var newPanelButton = new Button() { 
    Text = "0% Complete", 
    Location = new Point(117, 75), 
    Height = 80, 
    Width = 200 
}; 

var tabPage = new TabPage(); 
tabPage.Controls.Add(newPanelButton); 

tabControl1.TabPages.Add(tabPage);   
+0

仍然沒有效果。 – Gary

+0

你確定代碼正在運行?或者你有多個tabcontrols在窗體上? – Maarten

+0

是的,這非常令人困惑。我遍歷調試器中的代碼。這是應用程序中唯一的選項卡控件。我似乎沒有修改頁面的內容。我可能不得不嘗試一個獨立測試作爲完整性檢查。 – Gary