2011-02-14 41 views
2

我需要實現類似TabControl的行爲與手動(在事件,例如按鈕點擊)頁面切換和所有頁面設計和實施爲單獨的形式。在主窗體中包含一個窗體(作爲面板控件),並根據需要替換爲其他窗體。如何使用運行時嵌入窗體切換實現窗體內部的窗體?

如何實現這一目標?

PS:我不想使用TabControl的原因是因爲會有太多的選項卡 - 我寧願將它們的列表作爲TreeView呈現並按需實例化。另一個原因來自我的另一個項目 - 那裏我將實現插件,其中主窗口內的面板將由動態加載的類提供,並且將是運行時可切換的。

回答

1

我做了類似的事情,一次,因爲這個原因,我有ReplaceControl方法,這是我粘貼下面:

static public void ReplaceControl(Control ToReplace, Form ReplaceWith) { 
     ReplaceWith.TopLevel=false; 
     ReplaceWith.FormBorderStyle=FormBorderStyle.None; 
     ReplaceWith.Show(); 
     ReplaceWith.Anchor=ToReplace.Anchor; 
     ReplaceWith.Dock=ToReplace.Dock; 
     ReplaceWith.Font=ToReplace.Font; 
     ReplaceWith.Size=ToReplace.Size; 
     ReplaceWith.Location=ToReplace.Location; 
     ToReplace.Parent.Controls.Add(ReplaceWith); 
     ToReplace.Visible=false; 
    } 

唯一剩下要做的就是在表格上手動創建一些控制,如佔位符爲你的表格。例如,使用標籤。

2

我需要實現與手動TabControl的類似的行爲(事件,點擊一個按鈕爲例)頁面切換並具有設計和實施爲單獨的形式

請問所有頁面爲什麼這是一個要求?看起來合乎邏輯的方法是創建一組UserControls。您可以將一個UserControl放置在一個表單中,並且可以將一個UserControl放置在一個選項卡中。您可以獲得模塊化,而無需執行非常奇怪的需求,這是API開發人員顯然認爲無效的用例。我無法想出採取你建議的路線的好理由。

+0

「請問爲什麼這是要求?」 - 我剛將這個附加到問題文本中,參見PS。 – Ivan 2011-02-14 23:39:31

1

您可以使用MDIForm作爲主窗體,然後使用普通的Forms作爲單獨的窗體。或者您可以將每個元素的功能封裝爲UserControl,然後您可以在代碼中將表單換出。

將UI元素封裝爲UserControls的優點是,如果出於某種原因需要將它們變成應用程序中的窗體,則可以將UserControl放在窗體上。

更新:由於您想使用TreeView來選擇用戶正在查看的內容,因此您肯定希望將其作爲一組UserControls來執行此操作。佈局很簡單:左側是TreeView,右側是任何控件。

有沒有必要證明不使用TabControl - 標籤是歷史上最差的UI元素。