2014-03-13 26 views
2

我的目標
我正在使用Visual Studio 2013在C#中進行項目工作。該項目是我打算包含大量頁面的項目。這些頁面全部使用按鈕鏈接在一起。我的問題是,我不能想出一個高效和優雅的解決方案。用多個頁面創建Win表單的最有效方法是什麼?

我的企圖
到目前爲止,我已經想出了兩個有效的解決方案來解決我的問題。首先,我增加了額外的表格,然後按下按鈕我躲在目前的形式和顯示的新形式,就像這樣:

Form2 frm = new Form2(); 
frm.Show();` 
Form1.Hide(); 

雖然這工作,我有兩個問題吧。

  1. 我的項目將結束與數百形式
  2. 形式之間的過渡看起來馬虎。我的目標是像一個瀏覽器像轉換所有導航發生在一個窗口,而不打開和關閉其他人。

我試過的第二種可能的解決方案是使用面板。所以我基本上在不同的Panel上創建了每個頁面。然後按下按鈕顯示相應的面板,其餘部分隱藏。像這樣:

private void button1_Click(object sender, EventArgs e) 
{ 
    mainMenuPanel.Hide(); 
    submenuPanel1.Show(); 
    submenuPanel2.Hide(); 
    submenuPanel3.Hide(); 
    submenuPanel4.Hide();  
} 

這正是我正在尋找的,但是我的問題是管理大量面板很快變成了一場噩夢。編輯一個面板上的控件,該面板隱藏在9個其他面板後面,並且由於我項目中面板的數量只會增加 - 這看起來並不是目前形式的理想解決方案。

在我的腦海中,我想在Visual Studio 2013中可能有一個選項,它允許我'隱藏'我在表單上不使用的面板,或者暫時將它們從表單中拖出。這是Visual Studio中的一個選項。

如果沒有人知道更高效和可管理的方法來實現這一目標嗎?

在此先感謝。

+0

你用一個NavigateTo(控制控制)方法嘗試一個「ViewManager」類(簡單地說是一個容器形式)嗎?它會用給定的內容替換它的內容。每個「頁面」是一個控件(或一個用戶控件),您將在它們之間導航 –

+0

[ViewManager](http://msdn.microsoft.com/zh-cn/library/microsoft.windows.design.documents.viewmanager( v = vs.90).aspx) - MSDN says _This API支持.NET Framework基礎結構,並不打算直接從您的代碼中使用_您是否在談論那個鏈接? – Steve

+0

以防萬一您感興趣:基於XAML的現代UI框架(取代winforms)如WPF具有內置的所有功能。沒有必要重新發明輪子。順便說一句winforms不建議用於任何新項目,僅用於維護傳統應用程序。 –

回答

2

如果您正在使用的WinForms卡住了,你最好的選擇可能是使用用戶控件。您實際上可以將UserControl類擴展爲「頁面」,即:UserControlPage。這使得表單在功能上更加簡單,但是如果控件需要相互交流,你將需要做一些處理事件/傳遞數據的挑剔工作。

如果您沒有被釘入到Winforms中,那麼WPF本身支持所有這些,並且具有用於構建您需要的所有頁面以及存儲/填充數據和傳播事件的美妙工具。

+0

謝謝。其他幾位建議WPF。我不知道他們在建造表格時如此強大。我決定再次開始使用WPF。 – zxnked

+0

@zxnked WPF肯定能夠更好地處理這種情況,但請注意,學習曲線比Windows Forms' –

1

如果您想要改變內容的單一表格,並且您不想陷入一種形式的面板,那麼解決方案是user controls。您將能夠動態創建它們並添加到控件中。也沒有亂七八糟的,因爲你的形式將非常簡單 - 你可以將用於停靠當前顯示的用戶控件(如面板控制)單「佔位」控制:

private void ShowContent(Control content) 
{ 
    placeHolderPanel.Controls.Clear(); // clear current content 
    placeHolderPanel.Controls.Add(content); // add new 
    content.Dock = DockStyle.Fill; // fill placeholder area 
} 

用法:

private void button1_Click(object sender, EventArgs e) 
{ 
    ShowContent(new FooUserControl()); 
} 
0

你可以繼承Panel類和創造儘可能多的自定義面板根據需要,那麼他們將被插入您的主要形式,並且像你描述的管理。

好處是您可以單獨編輯它們作爲單獨的用戶控件。

缺點是您失去了主窗體上這些面板上控件的直接事件處理。您仍然可以在這些面板上定義自己的事件並委派單獨的控制事件。

總是有一個權衡的地方。

乾杯

相關問題