我需要實現類似TabControl的行爲與手動(在事件,例如按鈕點擊)頁面切換和所有頁面設計和實施爲單獨的形式。在主窗體中包含一個窗體(作爲面板控件),並根據需要替換爲其他窗體。如何使用運行時嵌入窗體切換實現窗體內部的窗體?
如何實現這一目標?
PS:我不想使用TabControl的原因是因爲會有太多的選項卡 - 我寧願將它們的列表作爲TreeView呈現並按需實例化。另一個原因來自我的另一個項目 - 那裏我將實現插件,其中主窗口內的面板將由動態加載的類提供,並且將是運行時可切換的。
我需要實現類似TabControl的行爲與手動(在事件,例如按鈕點擊)頁面切換和所有頁面設計和實施爲單獨的形式。在主窗體中包含一個窗體(作爲面板控件),並根據需要替換爲其他窗體。如何使用運行時嵌入窗體切換實現窗體內部的窗體?
如何實現這一目標?
PS:我不想使用TabControl的原因是因爲會有太多的選項卡 - 我寧願將它們的列表作爲TreeView呈現並按需實例化。另一個原因來自我的另一個項目 - 那裏我將實現插件,其中主窗口內的面板將由動態加載的類提供,並且將是運行時可切換的。
我做了類似的事情,一次,因爲這個原因,我有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;
}
唯一剩下要做的就是在表格上手動創建一些控制,如佔位符爲你的表格。例如,使用標籤。
我需要實現與手動TabControl的類似的行爲(事件,點擊一個按鈕爲例)頁面切換並具有設計和實施爲單獨的形式
請問所有頁面爲什麼這是一個要求?看起來合乎邏輯的方法是創建一組UserControls。您可以將一個UserControl放置在一個表單中,並且可以將一個UserControl放置在一個選項卡中。您可以獲得模塊化,而無需執行非常奇怪的需求,這是API開發人員顯然認爲無效的用例。我無法想出採取你建議的路線的好理由。
您可以使用MDIForm
作爲主窗體,然後使用普通的Forms作爲單獨的窗體。或者您可以將每個元素的功能封裝爲UserControl
,然後您可以在代碼中將表單換出。
將UI元素封裝爲UserControls的優點是,如果出於某種原因需要將它們變成應用程序中的窗體,則可以將UserControl放在窗體上。
更新:由於您想使用TreeView來選擇用戶正在查看的內容,因此您肯定希望將其作爲一組UserControls來執行此操作。佈局很簡單:左側是TreeView,右側是任何控件。
有沒有必要證明不使用TabControl - 標籤是歷史上最差的UI元素。
「請問爲什麼這是要求?」 - 我剛將這個附加到問題文本中,參見PS。 – Ivan 2011-02-14 23:39:31