2014-12-08 76 views
2

Initial Panels Position - image隐藏而在Windows重新显示板/组件窗体

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

1)当我第一次点击按钮1的PANEL1将dissapear和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组件。

谢谢。

回答

0

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

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

如果不应该面板由用户调整,然后设置

splitContainer1.IsSplitterFixed = true; 

要隐藏第一小组中,您所拨打的是:

splitContainer1.Panel1Collapsed = true; 

你明明设置为了把它带回来。

+0

不完全是我想要做的,但解决了与panel2不调整大小我的问题。谢谢。 – Xplouder 2014-12-08 16:40:45

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将在您运行之前保留该位置。也请尝试添加相同的高度和宽度。我认为这可能有效。我认为这个位置的变化是由于使用了码头属性,而只是解除锁定可能是不够的。在TableLayoutPanel中

时,我有复杂的cntrols

更新,需要动态变化。在这种情况下,我建议使用TAbleLayoutPanel。您可以将面板放置在桌面布局中,并将桌子放置在任何您想要的位置。你也可以把桌子放在桌子里面。然后,您可以隐藏,停靠和取消锁定,并且您的面板将位于固定网格中,因为它位于桌子中。检查TableLayoutPanel Here或更好的youlaube上的TableLAyoutPanel。希望这个帮助。

+0

我你的解决方案之前tryed,问题是,我永远不会知道是Panel2的宽度和高度,因为其调整automaticaly取决于大小的MainForm(即:如果我有最大化的窗口或随机大小)。这样我不能保存原始值,因为它们不是恒定的。 – Xplouder 2014-12-08 02:18:53

+1

嗨,在这种情况下使用tableLayoutPAnel。看到我上面的更新。把你的面板放在一个传说中(即一个网格)。然后停靠TAble,它将始终保持您想要的形状。 – 2014-12-08 02:48:53

+0

嗨。绝对是一个好的解决方案。说实话,我不知道这个组件。谢谢回复。 – Xplouder 2014-12-08 23:27:11

0

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

通过点击按钮来设置splitcontainer1.panle1.visible = truesplitcontainer1.panle2.visible=false和明年点击splitcontainer1.panle1.visible = falsesplitcontainer1.panle2.visible=true