Visual C#/WinForms面板

Visual C#/WinForms面板,c#,visual-studio-2010,panel,C#,Visual Studio 2010,Panel,我试图重叠面板,这样每当我点击一个按钮时,就会看到一个特定的面板 然而,做这项工作是非常棘手的,因为面板没有重叠 例如,我有面板1和面板2: 我使面板2与面板1相同, 每当我把它们放在同一个位置上。。。 有时,面板2会成为面板1的成员,每当我将面板1的可见性设置为true时,面板2也会显示 我想要的是两个面板相互重叠 “顺便说一句,我正在制作一个垂直标签,这就是为什么我认为隐藏、取消隐藏面板可能是我最好的方法 可以使面板相互重叠吗?完全可以使面板重叠 您面临的问题是,GUI编辑器将您的面板视为容

我试图重叠面板,这样每当我点击一个按钮时,就会看到一个特定的面板

然而,做这项工作是非常棘手的,因为面板没有重叠

例如,我有面板1和面板2:

我使面板2与面板1相同, 每当我把它们放在同一个位置上。。。 有时,面板2会成为面板1的成员,每当我将面板1的可见性设置为true时,面板2也会显示

我想要的是两个面板相互重叠

“顺便说一句,我正在制作一个垂直标签,这就是为什么我认为隐藏、取消隐藏面板可能是我最好的方法


可以使面板相互重叠吗?

完全可以使面板重叠

您面临的问题是,GUI编辑器将您的面板视为容器(这是真的),并且只要您在面板中放置某些内容(包括其他面板),它就会“嵌套”在此容器中

要避免这种行为,首先放置一个面板并适当调整其位置/大小。然后右键单击它并选择“锁定控件”“。这将锁定所有当前表单控件,您将能够将新控件(包括面板)直接放在它们上面,而不必担心某些内容将嵌套或以某种方式放置在现有容器中

当然,您的控件可以重叠——只考虑顺序或控件创建,也将在窗体中定义它们的z顺序——稍后添加的控件和稍后绘制的控件,从而定位在前面添加的那些控件的顶部。


编辑:不幸的是,我的答案并不完全正确。锁定面板并不能阻止它们完全吸吮其中的控制位置。但在部分重叠的情况下,两个容器都是在相同的深度上创建的,因此,在重叠面板的情况下,问题并不存在,正如问题中所问的那样。

设计师认为,您确实让它们重叠了。您需要使用一个小技巧来阻止底部面板吸吮重叠面板。将重叠面板朝左上角稍微偏移,使它们真正重叠。然后通过向表单构造函数添加代码将其放置在正确的位置:

    public Form1() {
        InitializeComponent();
        panel2.Location = panel1.Location;
        panel2.Size = panel1.Size;  // optional
    }

另一种方法是使用视图+其他窗口+文档布局。可以将内部面板拖放到外部容器(窗体)中。但是,您必须手动编辑Location属性。

面板有一个名为Location的属性,您可以根据需要修改该属性。只要您设法放置配电盘,使其具有正确的父级,就可以稍后通过更改“位置”属性来更改位置。实际上没有必要将设计代码放入构造函数或任何类似的东西中


要将面板放置在正确的父对象中,只需选择父对象并双击工具栏中的面板控件,而不是手动将其拖动到窗体中。真的没有必要在这件事上和设计师较量

如果锁控件能以这种方式工作,那就太好了。实际上没有,锁定的面板仍然会吸收重叠的面板。试试看。谢谢!!!我明白了,这就是锁控件的工作方式…:))顺便问一下,如何将正确答案标记为正确答案?@Hand Passant:嗯。。。在我发布我的答案之前,我检查了它,但现在我发现有时它不起作用。在任何情况下,只有当面板完全位于现有容器内时,才将其吸起,重叠仍然是可能的。但我会更正我的答案+1:这就是为什么我总是将一个面板隐藏在另一个面板后面,而我不想麻烦使用不同的
UserControl
选项来代替实例。如果有一种设计师友好的方式来重叠面板,那就太好了……有点像一个隐藏的选项卡。@IAbstract-检查一下: