2015-07-19 109 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面板与键盘移动。使用鼠标将始终将移动的一个分为而不是,另一个只要其左上角进入另一个。

作为替代方案,您可以在代码中移动。

在代码中执行它的优点是仍然能够使用较低的面板及其内容。有时我会将它们填入(在运行时不可见的)虚拟选项卡的标签页中,并将其移入或移出页面以隐藏和显示它们。