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组件。
谢谢。
答案 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 = true
和splitcontainer1.panle2.visible=false
,然后点击splitcontainer1.panle1.visible = false
和splitcontainer1.panle2.visible=true