C# 隐藏和显示面板

C# 隐藏和显示面板,c#,.net,installation,panel,C#,.net,Installation,Panel,编辑 我已经找到并发布了解决方案 我正在尝试为我的应用程序制作一个安装程序,我正在尝试使用面板(我不知道这是否是一个好的方法,但这给了我更多的自定义选项,而不是使用install shield程序)。最好的方法是什么? 这是我有权知道的代码: C#代码 foreach (var c in Controls) { if (!(c is Panel)) continue; if (c.Name == "pnlBottom") continue;

编辑
我已经找到并发布了解决方案

我正在尝试为我的应用程序制作一个安装程序,我正在尝试使用面板(我不知道这是否是一个好的方法,但这给了我更多的自定义选项,而不是使用install shield程序)。最好的方法是什么?
这是我有权知道的代码:

C#代码

foreach (var c in Controls)
{
    if (!(c is Panel)) continue;
    if (c.Name == "pnlBottom") continue;
        
    c.Visible = c.Name.Contains(_currentPanel.ToString());
    
    if (c.Visible) return;
}

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

foreach (var c in Controls)
{
    if (!(c is Panel)) continue;
    if (c.Name == "pnlBottom") continue;
        
    c.Visible = c.Name.Contains(_currentPanel.ToString());
    
    if (c.Visible) return;
}
这是我用来调用它并浏览我的面板的代码:
下一步按钮

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; }
}
后退按钮

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

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

foreach (var c in Controls)
{
    if (!(c is Panel)) continue;
    if (c.Name == "pnlBottom") continue;
        
    c.Visible = c.Name.Contains(_currentPanel.ToString());
    
    if (c.Visible) return;
}
这是我用来调用它并浏览我的面板的代码:
下一步按钮

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; }
}
后退按钮

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

尝试此操作,它会更改单个面板的可见性:

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(字符串panelName,bool-visible)
{
var panel=this.Controls.OfType().FirstOrDefault(p=>p.Name==panelName);
如果(面板!=默认(面板))面板可见=可见;
}
如果要使所有对象都不可见,但只有一个对象不可见,请执行以下操作:

private void PanelVisible(string panelName)
{
    foreach(var panel in this.Controls.OfType<Panel>().Where(p=>p.Name!="pnlBottom"))
    {
        panel.Visible = panel.Name == panelName;
    }
}
private void PanelVisible(字符串panelName)
{
foreach(此.Controls.OfType()中的var面板,其中(p=>p.Name!=“pnlBottom”))
{
panel.Visible=panel.Name==panelName;
}
}

尝试此操作,它会更改单个面板的可见性:

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(字符串panelName,bool-visible)
{
var panel=this.Controls.OfType().FirstOrDefault(p=>p.Name==panelName);
如果(面板!=默认(面板))面板可见=可见;
}
如果要使所有对象都不可见,但只有一个对象不可见,请执行以下操作:

private void PanelVisible(string panelName)
{
    foreach(var panel in this.Controls.OfType<Panel>().Where(p=>p.Name!="pnlBottom"))
    {
        panel.Visible = panel.Name == panelName;
    }
}
private void PanelVisible(字符串panelName)
{
foreach(此.Controls.OfType()中的var面板,其中(p=>p.Name!=“pnlBottom”))
{
panel.Visible=panel.Name==panelName;
}
}

我不确定您的具体问题是什么,但如果您只是想显示/隐藏面板,则可以直接执行_firstPanel.Visible=true_secondPanel.Visible=false;然后,一旦用户从第一个面板移动到第二个面板,通过单击按钮或其他方式,您只需_firstPanel.Visible=false_secondPanel.Visible=true;但是如果我有10个面板呢?有没有办法让它更容易?(要缩短我的代码?)您可以将上述代码转换为一个方法,并输入要显示的面板名称(panelNameToShow),然后隐藏所有其他面板。逻辑将与您所拥有的非常相似,您需要将c.Name.Contains(_currentPanel.ToString())更改为c.Name.Equals(panelnamethow)Okai,听起来这可能是解决方案是的,thx,我将尝试此:)!祝你好运:)如果你不能让它工作,我可以张贴的方法。我现在不在Visual Studio的电脑前。我不确定你的具体问题是什么,但如果你只是想显示/隐藏面板,那么你可以直接做_firstPanel.Visible=true_secondPanel.Visible=false;然后,一旦用户从第一个面板移动到第二个面板,通过单击按钮或其他方式,您只需_firstPanel.Visible=false_secondPanel.Visible=true;但是如果我有10个面板呢?有没有办法让它更容易?(要缩短我的代码?)您可以将上述代码转换为一个方法,并输入要显示的面板名称(panelNameToShow),然后隐藏所有其他面板。逻辑将与您所拥有的非常相似,您需要将c.Name.Contains(_currentPanel.ToString())更改为c.Name.Equals(panelnamethow)Okai,听起来这可能是解决方案是的,thx,我将尝试此:)!祝你好运:)如果你不能让它工作,我可以张贴的方法。我现在不在VisualStudio的电脑前。你的代码所做的,就是让所有面板都不可见,直到找到要显示的面板为止。这是由于您的return语句,因为它使代码跳出整个过程。您的代码所做的是使所有面板不可见,直到找到要显示的面板为止。这是由于您的return语句,因为它使代码跳出整个过程。我忘了添加有关名为“pnlBottom”的面板的异常。有关功能和智能的信息,请参见edit,其中:D+1我忘记添加有关名为“pnlBottom”的面板的异常。有关功能和智能的信息,请参见编辑,其中:D+1