2014-09-22 93 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; 
} 

这将消除任何潜在的在类型转换错误,以及给你哪些面板在更明确的控制以显示或隐藏,因为您可能希望将面板用于与此操作中显示/隐藏的其他事物无关的其他事物。