在Windows窗体中隐藏和重新显示面板/组件

时间:2014-12-08 01:59:01

标签: c# winforms panel

Initial Panels Position - image

嗨,我试图做一个按钮动作,执行以下行为:

1)当我第一次点击button1时,panel1将消失,panel2将获得Parent容器的大小。

2)如果我再次点击按钮,面板1将再次出现,面板2将重新启用。

然后问题出现在第2步,当我重新点击button1时,panel2不能很好地调整大小并以某种方式获得固定值(检查:problem - image)。

我正在尝试这样的事情:

private void button1_Click(object sender, EventArgs e){

        if (panel1.Visible){
            panel1.Visible = false;
            panel1.Enabled = false;         
            panel2.Dock = DockStyle.Fill;
        }
        else{
            panel1.Visible = true;
            panel1.Enabled = true;
            panel2.Dock = DockStyle.None;
            panel2.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right;
        }

    }

PS:检查图像链接,可能有助于理解问题。我项目中的panel2也是一个WebBrowser组件。

谢谢。

3 个答案:

答案 0 :(得分:0)

在运行之前,复制panel1的位置并将其重新发布到同一位置。示例

  if (panel1.Visible){
            panel1.Visible = false;
            panel1.Enabled = false;         
            panel2.Dock = DockStyle.Fill;
        }
        else{
            panel1.Visible = true;
            panel1.Enabled = true;
            panel2.Dock = DockStyle.None;
            panel2.Location = new Point(15, 15);
            panel2.Height= //Original height before you run.
            panel2.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right;
        }

注意:新Point将在您运行之前保留该位置。同时尝试添加相同的高度和宽度。我认为这可行。我认为这种位置的变化是由于使用了dock属性而且只是取消停靠可能还不够。

TableLayoutPanel上的更新

当我有复杂的控件需要动态更改时。在这种情况下,我建议使用TAbleLayoutPanel。您可以将面板放在表格布局中,并将表格停靠在您想要的位置。你也可以将桌子内的面板对接。然后你可以隐藏,停靠和取消停靠,你的面板将在一个固定网格中,因为它在一个表格中。在youtube上检查TableLayoutPanel Here或更好的TableLAyoutPanel。希望这有帮助。

答案 1 :(得分:0)

实际上,您应该使用的控件是SplitContainer控件。

您可以使用SplitContainer的Panel1作为第一个Panel,而在SplitContainer的Panel2中,您将Dock-Fill您的WebBrowser控件。

如果用户不应调整面板的大小,请设置

splitContainer1.IsSplitterFixed = true;

要隐藏第一个Panel,您只需调用:

splitContainer1.Panel1Collapsed = true;

您显然将其设置为false以将其恢复。

答案 2 :(得分:0)

使用splitcontainer控件并在其panle1和panel2中添加两个面板控件。

点击按钮集splitcontainer1.panle1.visible = truesplitcontainer1.panle2.visible=false,然后点击splitcontainer1.panle1.visible = falsesplitcontainer1.panle2.visible=true