2014-09-22 95 views
0

c#Windows窗體:C#只顯示一個特定面板?

有沒有辦法讓按鈕顯示一個特定的面板,並隱藏所有其他人?

事情是這樣的:

private void button1_Click(object sender, EventArgs e) 
     { 
      panel1.Visible = true; 
      !panel1.Visible = false; 
     } 

回答

-1

只需創建一個事件按鈕單擊一個面板上設置可見真及其他一系列錯誤:

private void button1_Click(object sender, EventArgs e) 
{ 
    panel1.Visible = true; 
    panel2.Visible = false; 
    panel3.Visible = false; 
} 
+0

如果有很多面板會導致很多非常重複的代碼。 – David 2014-09-22 17:05:28

+0

是的,但它是最好的。 – koca2000 2014-09-22 17:07:07

+0

當代碼需要支持一段時間時,「最簡單」的代碼很快就會失去吸引力。如果某些東西非常簡單,但是可以擴展到非常複雜的東西,那麼它不會比稍微簡單一些但在代碼庫的整個生命週期內始終保持一致的簡單水平。 – David 2014-09-22 17:08:15

0

也許你可以通過Controls收集表格上環並在顯示您想要的控件之前將所有Panel控件設置爲隱藏。例如:

private void HidePanels() 
{ 
    foreach (var control in Controls) 
     if (control is Panel) 
      ((Panel)control).Visible = false; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    HidePanels(); 
    panel1.Visible = true; 
} 

如果您將面板嵌套在其他控件中,這可能不可靠。自從我使用表單以來,這已經有一段時間了,所以我不能肯定地說有多可能。但有一件事你可以做的是保持一個明確面板列表上你想申請你的邏輯。事情是這樣的:

private IEnumerable<Panel> _panels; 
private IEnumerable<Panel> Panels 
{ 
    get 
    { 
     if (_panels = null) 
      _panels = new List<Panel> 
      { 
       Panel1, 
       Panel2, 
       Panel3, 
       // etc... 
      } 
     return _panels; 
    } 
} 

然後依次通過,代替Controls集合:

private void HidePanels() 
{ 
    foreach (var panel in Panels) 
     panel.Visible = false; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    HidePanels(); 
    panel1.Visible = true; 
} 

這將消除任何潛在的在類型轉換錯誤,以及給你哪些面板在更明確的控制以顯示或隱藏,因爲您可能希望將面板用於與此操作中顯示/隱藏的其他事物無關的其他事物。