2010-09-29 89 views
3

我有一个由几个splitcontainer分隔的屏幕。其中一个包含我制作的用户组件的矩形,这些“矩形”代表医院病床。我想要做的是给用户在这个“用户组件视图”和“数据网格视图”之间切换的选项。C#隐藏并显示在分离容器顶部的面板

所以我创建了一个面板pnlPatients,我给出了与用户组件相同的splitcontainer大小。当用户选择“更改视图”时,程序应该在两种布局之间切换。

代码: 尝试1:

if (pnlPatients.Visible) 
    pnlPatients.Hide(); 
else 
{ 
    pnlPatients.Show(); 
    pnlPatients.BringToFront(); 
} 

尝试2:

pnlPatients.Visible = !pnlPatients.Visible; 
pnlPatients.Invalidate(); 

奇怪的是,这两个尝试这样的工作:

用户首先看到“用户组件视图”。 如果他将切换视图,它会正确显示在上一个视图顶部的面板。 如果他再次切换,那么面板将被正确隐藏。 如果他再次切换视图,那么面板将不会显示。请注意:在调试时,面板的可见属性正确更改为TRUE或FALSE。但出于某种原因,只有第一次将其显示为TRUE时才能看到面板。

有没有人有想法?

问候

编辑:我也试过,但没有更迭:

pnlPatients.Visible = !pnlPatients.Visible; 
if (pnlPatients.Visible) 
{ 
    pnlPatients.BringToFront(); 
} 
else 
{ 
    pnlPatients.SendToBack(); 
} 
+0

什么是两个面板的家长? – 2010-09-29 08:25:56

+0

基本的Windows窗体是父窗体。 – Starceaker 2010-09-29 08:32:31

回答

2

看一看this

+0

这似乎是在做伎俩。通过使用Panel1Collapsed和Panel2Collapsed布尔值。谢谢! – Starceaker 2010-09-29 10:12:29

0

而是无效的面板控制的,无效的主机的形式,迫使它重新绘制它的所有孩子以及通过调用this.Invalidate(true);

+0

我会在一秒钟之内尝试,我现在尝试添加一个额外的splitcontainer,以查看我是否可以隐藏或显示这些内容。以下托尼提供的链接。如果这不起作用,我会尝试一下,谢谢。 – Starceaker 2010-09-29 09:54:41

5

万一有人不希望通过所有托尼的链接来趟:

this.splitContainer.Panel2.Hide(); 
this.splitContainer.Panel2Collapsed = true; 
+0

我认为隐藏Panel2是没有必要的。尽管我没有测试过,但折叠应该足够了。 – 2013-11-04 08:18:53

3
int control = 0; 

    private void hideShowLogToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (control == 0) 
     { 
      control = 1; 

      splitContainer1.Panel2Collapsed = false; 

      splitContainer1.Panel1Collapsed = true; 

     } 
     else if (control == 1) 
     { 
      control = 0; 

      splitContainer1.Panel2Collapsed = true; 

      splitContainer1.Panel1Collapsed = false; 
     } 
    } 
0
bool state; 
    private void btn_Click(object sender, EventArgs e) 
    { 
     if (state) 
     { 
      splitContainer1.Panel1Collapsed = true; 
      splitContainer1.Panel2Collapsed = false; 
      state = false; 

     } 
     else 
     { 
      splitContainer1.Panel1Collapsed = false; 
      splitContainer1.Panel2Collapsed = true; 
      state = true; 

     } 

    }