2015-07-19 154 views
3

我有3個面板以1格式通過輸入某些數據的過程。當單擊面板中的下一個按鈕時,應顯示下一個面板。 最初我已啓用第一個面板的可見性並禁用了其他面板的可見性。
當下一個按鈕被點擊時,下面的代碼將被執行。
在面板之間切換

 panel1.Visible = false; 
     panel2.Visible = true; 

爲發展目的,我已經把它們並排(不是在另一個之上),它炒菜鍋完美。
但是,當我把它們放在另一個上面的代碼看起來不是炒鍋,這意味着當單擊下一個按鈕時,它只顯示一個空的表單。
然後我也在下面的代碼中添加了。

panel1.SendToBack(); 
    panel2.BringToFront(); 

但它沒有奏效。有人可以幫我弄這個嗎。

謝謝。

回答

1

下面是可用於同時具有多個面板的代碼,並在添加到表單中的下一個按鈕之間進行切換。

public Form1() 
    { 
     InitializeComponent(); 
     panel1.Visible = true; 
     panel3.Visible = false; 
     panel2.Visible = false; 
    } 

    private void btnNext_Click(object sender, EventArgs e) 
    { 
     if (panel1.Visible) 
     { 
      panel1.Visible = false; 
      panel2.Visible = true; 
      panel3.Visible = false; 
     } 
     else if (panel2.Visible) 
     { 
      panel1.Visible = false; 
      panel2.Visible = false; 
      panel3.Visible = true; 
     } 
     else if (panel3.Visible) 
     { 
      panel1.Visible = true; 
      panel2.Visible = false; 
      panel3.Visible = false; 
     } 
    } 

當然,如果你升序標記您的面板/降格式的標籤之間沒有間隙例如1,2,3,4或5,4,3,2不是1,2,4諸位可以使用此代碼

public Form1() 
    { 
     InitializeComponent(); 
     panel1.Visible = true; 
     panel2.Visible = false; 
     panel3.Visible = false; 
    } 

    private void btnNext_Click(object sender, EventArgs e) 
    { 
     TogglePanels(); 
    } 
    public void TogglePanels() 
    { 
     List<Panel> allPanelsInForm = new List<Panel>(); 
     foreach (var control in Controls) 
     { 
      if (control is Panel) 
       allPanelsInForm.Add(control as Panel); 
     } 
     Panel visiblePanel = allPanelsInForm.Where(o => o.Visible).FirstOrDefault(); 
     int nextPanelId = Convert.ToInt32(visiblePanel.Tag) + 1; 
     bool nextPanelExists = allPanelsInForm.Exists(o => Convert.ToInt32(o.Tag) == nextPanelId); 
     nextPanelId = nextPanelExists ? nextPanelId : 1; 
     foreach (Panel panel in allPanelsInForm) 
     { 
      panel.Visible = Convert.ToInt32(panel.Tag) == nextPanelId ? true : false; 
     } 
    } 

我希望它能幫助你。

+0

我很抱歉,但這也是我的代碼。這是不行的,因爲它應該是。 – jayz

+0

好的兄弟,但只是爲了您的保證我自己檢查這個代碼與VS2013,他們都像一個魅力。你可以用一個空的項目來試試這個代碼嗎?也許這是一種幫助 – mostafakvd

5

設計師總是出現這種錯誤,底部面板將成爲頂級設計師的家長。所以如果你隱藏底部的一個,你永遠不會看到頂部。

這可以通過查看>(其他窗口)>文檔大綱解決,將頂部面板拖回窗體。仍然非常痛苦,你通常必須手動編輯位置,並在設計器中對錶單進行任何更改後,都傾向於將面板淹沒。

有更好的方法來做到這一點。強烈推薦創建UserControls,它們有自己的設計界面。或者使用RAD方式,並用TabControl來代替。您只需在運行時隱藏選項卡,即this Q+A的主題。

4

將容器控件如Panel'一個接一個'放在一起時,必須小心。

在設計你可以做到這一點,但只有通過的carfully面板與鍵盤移動。使用鼠標將始終將移動的一個分爲而不是,另一個只要其左上角進入另一個。

作爲替代方案,您可以在代碼中移動。

在代碼中執行它的優點是仍然能夠使用較低的面板及其內容。有時我會將它們填入(在運行時不可見的)虛擬選項卡的標籤頁中,並將其移入或移出頁面以隱藏和顯示它們。