2012-11-17 170 views
0

编辑
我找到并发布了解决方案。隐藏和显示面板

我想为我的应用程序做一个安装程序,我试图用面板做到这一点(我不知道这是否是一个很好的方法,但这给了我更多的自定义选项,而不是使用安装屏蔽程序)。什么是最好的方法来做到这一点?
这是代码,我有权知道:

C#代码

foreach (Control c in Controls) 
     { 
      if (c is Panel) 
      { 
       if (c.Name != "pnlBottom") 
       { 
        if (c.Name.Contains(_currentPanel.ToString())) 
        { 
         c.Visible = true; 
         return; 
        } 
        else 
        { 
         c.Visible = false; 
        } 
       } 
      } 
     } 
+0

我不知道你的具体问题是什么但如果你只是试图显示/隐藏面板,那么你可以直接做。 _firstPanel.Visible = true; _secondPanel.Visible = false;然后,一旦用户从第一个面板移动到第二个面板,通过点击按钮或其他任何操作,您只需_firstPanel.Visible = false; _secondPanel.Visible = true; –

+0

但是如果我有10个面板呢?有没有办法让它更容易? (为了让我的代码更短?) –

+0

您可以将上面的代码转换为方法,并传递要显示的面板名称(panelNameToShow),然后隐藏所有其他面板。逻辑将是非常相似,你有什么,你需要将c.Name.Contains(_currentPanel.ToString())更改为c.Name.Equals(panelNameToShow) –

回答

5

试试这个,它改变单一面板的可见性:如果你想使所有隐形

private void PanelVisible(string panelName, bool visible) 
{ 
    var panel = this.Controls.OfType<Panel>().FirstOrDefault(p => p.Name == panelName); 
    if (panel != default(Panel)) panel.Visible = visible; 
} 

,但一个:

private void PanelVisible(string panelName) 
{ 
    foreach(var panel in this.Controls.OfType<Panel>().Where(p=>p.Name!="pnlBottom")) 
    { 
     panel.Visible = panel.Name == panelName; 
    } 
} 
+0

想试试这个代码,然后:) –

+0

我忘了添加关于面板名称为“pnlBottom”的异常。 查看编辑 – CSharpie

+0

功能和智能在哪里:D +1 –

1

这是我使用的显示面板的代码:

private void ShowPanel(string panel) 
    { 
     foreach (Control c in Controls) 
     { 
      if (c is Panel) 
      { 
       if (c.Name != "pnlBottom") 
       { 
        if (c.Name.Contains(panel)) 
        { 
         c.Visible = true; 
         return; 
        } 
        else 
        { 
         c.Visible = false; 
        } 
       } 
      } 
     } 
    } 

这是我的代码用它来打电话并浏览我的面板:
Next button

private void btnNext_Click(object sender, EventArgs e) 
    { 
     if (pnlContent1.Visible) { ShowPanel("2"); return; } 
     if (pnlContent2.Visible) { ShowPanel("3"); return; } 
     if (pnlContent3.Visible) { ShowPanel("4"); return; } 
     if (pnlContent4.Visible) { ShowPanel("5"); return; } 
    } 

后退按钮

private void btnBack_Click(object sender, EventArgs e) 
    { 
     if (pnlContent2.Visible) { ShowPanel("1"); return; } 
     if (pnlContent3.Visible) { ShowPanel("2"); return; } 
     if (pnlContent4.Visible) { ShowPanel("3"); return; } 
     if (pnlContent5.Visible) { ShowPanel("4"); return; } 
    } 

我希望这将是利用别人还有:d!

+0

您的代码所做的工作是使所有面板不可见,直到找到可见的面板。这是由于你的return语句,因为它使得代码跳出整个过程。 – CSharpie