C#隐藏并在splitcontainer顶部显示一个面板

时间:2010-09-29 08:12:42

标签: c# winforms panel

我有一个由几个拆分容器划分的屏幕。其中一个包含我用户组件的矩形,这些“矩形”代表医院病床。我想要做的是让用户可以选择在“用户组件视图”和“数据网格视图”之间切换。

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

代码: 尝试1:

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

尝试2:

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

奇怪的是,这两种尝试都是这样的:

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

有没有人有想法?

祝你好运

编辑:我也试过这个但没有成功:

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

5 个答案:

答案 0 :(得分:5)

如果有人不想涉及Tony的所有链接:

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

答案 1 :(得分: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;
        }
    }

答案 2 :(得分:2)

查看this

答案 3 :(得分:0)

通过调用this.Invalidate(true);

,而不是使Panel控件无效,使Host窗体无效以强制重绘所有子窗体。

答案 4 :(得分: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;

        }

    }